C ++使用adodb读取64位Windows 7中的excel文件?

时间:2017-07-02 16:55:39

标签: c++ excel windows 64-bit ado

我有一个遗留的c ++代码,使用adodb来读取32位窗口中的excel文件,它正在运行文件,它类似于:

#import "C:/Program Files/Common Files/System/ado/msado15.dll"  rename("EOF", "adoEOF") rename("BOF", "adoBOF")

string conn_str;
if(*(file_name.back()) == 'x')
    conn_str = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file_name + ";Extended Properties=\"Excel 12.0 Xml;HDR=Yes;IMEX=1\"";
else
    conn_str = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + file_name + ";Extended Properties=\"Excel 8.0;HDR=Yes\"";

::CoInitialize(NULL);

pRec->Open("SELECT * FROM [" + SheetName + "]", conn_str, adOpenStatic, adLockOptimistic, adCmdText));

现在转移到要部署的新环境(64位Windows + 64位excel),代码无法运行,错误消息是“无法找到提供商”。

试图解决这个问题,但在互联网上搜索后我有点困惑。

Microsoft FAQ About Windows DAC/MDAC等似乎说,“Microsoft数据访问组件(MDAC)”包括ADO,OLE DB和ODBC;但MDAC已经过时,现在该软件包被称为“Windows数据访问组件(Windows DAC)”,它自动安装在Windows 7中。

- 所以我不需要在64位Windows 7上安装MDAC,Microsoft Data Access Components (MDAC) 2.8 SP1上的下载是32位吗?

但是,我怎样才能使用调用msado15.dll的遗留代码来读取excel?

我应该将32位MDAC安装到SysWOW64文件夹并继续使用吗?但是这个32位msado可以打开由64位excel创建的excel文件吗?

或者我是否应该使用“Windows DAC”中的其他dll在64位窗口上使用ado?

或者,我必须放弃ado并找到其他方法来阅读c ++中的excel文件?

1 个答案:

答案 0 :(得分:0)

如果有任何人碰到这里,要在安装了Office 64位的x64 windows机器上访问c ++代码中的excel数据,你需要

  • 下载Microsoft Access Database Engine 2016 Redistributable 并安装
  • 使用C ++代码导入msadoXX.dll
  • 使用正确的连接字符串,在上面的页面上展开"安装说明"有一些细节,如ConnectionString属性为“Microsoft.ACE.OLEDB.12.0”,对于Excel 97-2003工作簿(.xls)使用" Excel 8.0",对于Excel工作簿(.xlsx)使用&# 34; Excel 12.0 Xml"注意:" Microsoft.JET.OLEDB"不起作用。