C++读取excel特定行列中的数据
可以通过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特定行列中的数据的更多相关文章
- POI 读取Excel文档中的数据——兼容Excel2003和Excel2007
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. HSSF - 提供读写Microsoft Exce ...
- Java读取excel指定sheet中的各行数据,存入二维数组,包括首行,并打印
1. 读取 //读取excel指定sheet中的各行数据,存入二维数组,包括首行 public static String[][] getSheetData(XSSFSheet sheet) thro ...
- C# 开源组件--NPOI读取Excel单元格中的公式值
今天在项目中碰到了EXCEL导入的数据是用公式生成,直接导入不了数据,写在博客中方便自已查询也可以给想找这方面的参考一下: 用NPOI导入时,在OFFICE 2007中的文件导入时一般会用XSSF,所 ...
- C#跨进程读取listview控件中的数据
http://www.cnblogs.com/Charltsing/p/slv32.html 欢迎交流:QQ564955427 读取标准的32位listview控件中的数据,网上已经有很多代码了.今天 ...
- Python实现读取Excel文档中的配置并下载软件包
问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...
- 通过正则表达式提取excel特定列中含有关键字的所有行数据
在 Excel 中打开需要提取数据excel文件,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出现右侧的编辑代码窗口(如下图) 在代码窗口中输入以 ...
- POI 读取Excel文件 并解析JSON数据
package skuPrice; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...
- 在服务端中,读取properties资源文件中的数据
1.获取到资源的路径 2.读取数据 //properties文件对象 Properties properties = new Properties(); //通过HttpServletRequest ...
- python 读取文本文档中的数据
import os dir = input('Please input the file dir:')#提示输入文件路径 while not os.path.exists(dir):#判断文件是否存在 ...
随机推荐
- Valgrind: memcheck of memleak/mem-uninitialization; massif usage
first install valgrind, its newest ver is 3.11, and stops updating since 2015/12. in centos, yum ins ...
- jquery-图片轮播(新手请大神指教一下)
这是我刚学jquery写的,感觉效果不是很好. #scrollPics{ height: 330px; width: 980px; margin-bottom: 10px; overflow: hid ...
- wordpress 修改过程
chown -R www /home/www/wordpress,把所有者修改成www. 如果不行 则 解决"要执行请求的操作,WordPress需要访问您网页服务器的权限"方法: ...
- Web开发人员不要错过的60款用户界面设计工具(下)
41. Snipplr 包含最新的脚本和jQuery技术资源库. 42. Midori Midori是一个超轻量级的JavaScript框架,可使用CSS选择器快速访问页面上对应的元素. 43. ro ...
- Android实现Excel表格,且表格能左右、上下滑动
1.自定义实现一个水平滚动控件HorizontalScrollView import android.content.Context; import android.util.AttributeSet ...
- 中国内地、台湾、香港、澳门和国外DNS服务器地址列表
中国内地.台湾.香港.澳门和国外DNS服务器地址列表 详细内容 作者:网路岗 来源:局域网监控软件 DNS(Domain Name System)是域名解析服务器的意思,它在互联网的作用是把域名转换成 ...
- 12.04 ubuntu 更改IP
在一个局域网里面,如果是自动获取IP,就会导致IP冲突 进入要连接的热点进行设置 IPV4 Setting address netmask ...
- linux 内核协议栈收报流程(一)ixgbe网卡驱动
首先模块加载insmod ixgbe.ko module_init(ixgbe_init_module); module_init(ixgbe_init_module); { int ret; pr_ ...
- Struts2的运行机制简介
1.客户端通过URL请求tomcat 2.URL找到对应站点的WEB.xml 发现里面有 struts2配置 3.执行StrutsPrepareAndExecuteFilter类的init方法 4 ...
- MyBatis SQL配置文件中使用#{}取值为null时却不报错的解决方案。
原因是因为#{kh_id} 这个参数名为小写,我之前写成了大写{#KH_ID}所以取不到值