运行结果截图:
生成的Excel截图:
主要代码片段:
//导入Excel COM支持。。。不过程序编译后即使客户机没有安装Excel软件,也可读写Excel!!!
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF")
...
//连接字符串(这里是Excel 2003, 2007的Extended Properties="Excel 12.0 Xml;貌似找不到驱动,有解决的烦请评论告知下)
"Provider='Microsoft.JET.OLEDB.4.0';Data Source=" << filename << ";Extended Properties=\"Excel 8.0;HDR=" << hdr << "\"";
...
//建立连接(通用的ADO方法,读写数据库也是这种写法)
_bstr_t connStr(makeConnStr(excelFile, header).c_str());
TESTHR(pRec.CreateInstance(__uuidof(Recordset)));
TESTHR(pRec->Open(sqlSelectSheet(connStr, sheetIndex).c_str(), connStr, adOpenStatic, adLockOptimistic, adCmdText));
...
//读单元格,拉游标到下一行
_variant_t v = pRec->Fields->GetItem("列A")->Value;
pRec->MoveNext();
//写单元格,更新单元格,关闭
pRec->Fields->GetItem("列A")->Value = _variant_t(i);
TESTHR(pRec->Update());
TESTHR(pRec->Close());
...
//更多详细请查看工程源码
注意点:
1、程序编译后即使客户机没有安装Excel软件,也可运行读写Excel!!!
2、读写Excel 2003 OK,2007及之后的连接字符串的 Provider='Microsoft.ACE.OLEDB.12.0';Data Source=" << filename << ";Extended Properties=\"Excel 12.0;HDR=" << hdr << "\" 貌似找不到驱动,有解决的烦请评论告知下,谢谢。
3、定位单元格可以用整数索引,也可以用字符串列名(第一行的文字)。
4、SELECT * FROM [中文Sheet名$] 中文Sheet名后要加"$"。
5、单元格为空的话,v.vt 值为 VT_NULL。