可以通过COM API调用才是正解,不过需要编写COM接口类,Excel对象库的接口太多了……不过可以用工具自动生成。

我最近也在用VC操作Excel,在VC中可以这样做,在任何一个cpp文件中加入下面三行:

 #import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSO.DLL" rename("RGB","rgb") rename("DocumentProperties", "document_properties")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "D:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" rename("RGB","rgb") rename("DialogBox", "dialog_box")

然后编译。

注意,这样编译是通不过的,不过没关系,在Debug目录中你会看到mso.tlh、mso.tli、vb6ext.tlh、vb6ext.tli、excel.tlh、excel.tli六个文件,它们就是VC编译器通过类型库信息自动生成的接口类型定义和一些辅助类。把它们复制到你的源代码目录,然后打开vb6ext.tlh,进行修改:

 #include <comdef.h>
#include "mso.tlh" //加入这一行 namespace VBIDE
{
using namespace Office;//加入这一行
...

再修改excel.tlh文件:

 #include <comdef.h>
#include "mso.tlh" //加入这一行
#include "vbe6ext.tlh" //加入这一行 namespace Excel
{
using namespace VBIDE;//加入这一行

这时把那三行#import删除,换成#include "excel.tlh"就可以用了:

 #include "stdafx.h"
#include "excel.tlh"
#include <iostream> int _tmain(int argc, _TCHAR* argv[]) {
CoInitializeEx( , COINIT_APARTMENTTHREADED );
Excel::_ApplicationPtr xApp;
xApp.CreateInstance(__uuidof(Excel::Application));
Excel::_WorkbookPtr xBook = xApp->Workbooks->Open(L"test.xsl");
Excel::_WorksheetPtr xSheet = xBook->ActiveSheet; _bstr_t text = xSheet->Range[L"A1"][vtMissing]->Text;//读取单元格内容,_bstr_t封装了COM宽字符串BSTR
std::cout << static_cast<char const *>(text);//_bstr_t类定义了到char const *的类型转换,会把unicode字符串转换为当前代码页的多字节编码字符串
return ;
}

把Excel作为数据库直接通过ODBC方式读取

 #include <odbcinst.h>
#include <afxdb.h> CString strXlsFileName = "X:\\XXX.xls";
CString strSql;
strSql.Format(L"DRIVER={MICROSOFT EXCEL DRIVER (*.xls)};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", strXlsFileName, strXlsFileName); CDatabase *pCDatabase = new CDatabase;
pCDatabase->OpenEx(strSql, CDatabase::noOdbcDialog); CString strSheetName = "你要操作的表名称";
CString strSql;
strSql.Format(L"SELECT * FROM [%s$A1:IV65536]", strSheetName); CRecordset *pCRecordset = new CRecordset(pCDatabase);
pCRecordset->Open(CRecordset::forwardOnly, strSql, CRecordset::readOnly); CString strField;
pCRecordset->GetFieldValue((short), strField);//读取第1行第1列的单元格内容
pCRecordset->GetFieldValue((short), strField);//第1行第4列
pCRecordset->MoveNext();//游标指向下一行,再用GetFieldValue就可以读取下一行的内容

C++读取excel特定行列中的数据的更多相关文章

  1. POI 读取Excel文档中的数据——兼容Excel2003和Excel2007

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. HSSF - 提供读写Microsoft Exce ...

  2. Java读取excel指定sheet中的各行数据,存入二维数组,包括首行,并打印

    1. 读取 //读取excel指定sheet中的各行数据,存入二维数组,包括首行 public static String[][] getSheetData(XSSFSheet sheet) thro ...

  3. C# 开源组件--NPOI读取Excel单元格中的公式值

    今天在项目中碰到了EXCEL导入的数据是用公式生成,直接导入不了数据,写在博客中方便自已查询也可以给想找这方面的参考一下: 用NPOI导入时,在OFFICE 2007中的文件导入时一般会用XSSF,所 ...

  4. C#跨进程读取listview控件中的数据

    http://www.cnblogs.com/Charltsing/p/slv32.html 欢迎交流:QQ564955427 读取标准的32位listview控件中的数据,网上已经有很多代码了.今天 ...

  5. Python实现读取Excel文档中的配置并下载软件包

    问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...

  6. 通过正则表达式提取excel特定列中含有关键字的所有行数据

    在 Excel 中打开需要提取数据excel文件,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出现右侧的编辑代码窗口(如下图) 在代码窗口中输入以 ...

  7. POI 读取Excel文件 并解析JSON数据

    package skuPrice; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...

  8. 在服务端中,读取properties资源文件中的数据

    1.获取到资源的路径 2.读取数据 //properties文件对象 Properties properties = new Properties(); //通过HttpServletRequest ...

  9. python 读取文本文档中的数据

    import os dir = input('Please input the file dir:')#提示输入文件路径 while not os.path.exists(dir):#判断文件是否存在 ...

随机推荐

  1. 搭建localhost的目录环境

    .打开系统盘,默认是C:\Windows\System32\drivers\etc,如果系统盘是D盘就打开D:\Windows\System32\drivers\etc: .用记事本打开hosts: ...

  2. sql注入绕过union select过滤

    # # # #WAF Bypassing Strings: /*!%55NiOn*/ /*!%53eLEct*/ ,,)-- - +union+distinct+select+ +union+dist ...

  3. sql 将表B中不存在表A的数据 插入到表A中

    insert into tableA select * from tableB b where not exists(select 1 from tableA a where a.id = b.id) ...

  4. UVA 12083 POJ 2771 Guardian of Decency

    /* http://acm.hust.edu.cn/vjudge/contest/view.action?cid=71805#problem/C */ 性质: [1]二分图最大点独立数=顶点数-二分图 ...

  5. java链表实现快排

    链表文件 package sort; public class SqList {    public int LIST_INIT_SIZE = 8;//链表的原始大小    private int I ...

  6. Hibernate与Sleep的区别

    转自:http://blog.sina.com.cn/s/blog_4b6e98810100n37k.html 休眠(Hibernate),将系统切换到该模式后,系统会自动将内存中的数据全部转存到硬盘 ...

  7. LINUX修改IP地址

    以前都是使用自动IP动态分配获取IP的,虽然每次获得的ip都是相同的,但我还是决定自己设置一个IP.输入命令:[root@localhost ~]# ifconfig eth0 219.246.177 ...

  8. 《JS权威指南学习总结--4.13运算符》

    一.typeof运算符     typeof是一元运算符,放在其单个操作数的前面,操作数可以是任意类型.返回值为表示操作数类型的一个字符串.     例如:     typeof x          ...

  9. hdu_2842_Chinese Rings(矩阵快速幂)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题意:解开第k个环需要先解开前(k-2)个环,并留有第(k-1)环.问解开n环最少需要几步. 题 ...

  10. diff and patch

    A patch captures the changes of two different files (oldfile and newfile). Given the oldfile and the ...