C++ 使用 adodb 读取 64 位 excel 文件 windows 7?
C++ using adodb to read excel file in 64-bit windows 7?
我有一个遗留的 c++ 代码使用 adodb 读取 32 位 excel 文件 windows,它是 运行ning 文件,类似于:
#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),代码不能运行,错误信息是"the Provider could not be found" .
正在尝试解决问题,但在网上搜索后我有点困惑。
Microsoft FAQ About Windows DAC/MDAC 等似乎说,"Microsoft Data Access Components (MDAC)" 包括 ADO、OLE DB 和 ODBC;但 MDAC 已过时,现在该软件包称为 "Windows Data Access Components (Windows DAC)",它会自动安装在 windows 7.
中
-- 所以我不需要在64位上安装MDAC Windows7,Microsoft Data Access Components (MDAC) 2.8 SP1上下载的是32位的?
但是我如何使用旧代码调用 msado15.dll
来读取 excel?
我可以将 32 位 MDAC 安装到 SysWOW64
文件夹并继续使用吗?但是这个32位的msado可以打开一个由64位excel创建的excel文件吗?
或者我应该使用 "Windows DAC" 中的其他一些 dll 在 64 位 windows 上使用 ado 吗?
或者,我必须放弃麻烦并找到其他方法来读取 C++ 中的 excel 文件?
如果有人碰到这里,要在安装了 office 64 位的 x64 windows 机器上访问 excel c++ 代码中的数据,您需要
- 下载Microsoft Access Database Engine 2016 Redistributable
并安装
- 在 C++ 代码中导入 msadoXX.dll
- 使用正确的连接字符串,在上面扩展"install instructions"的页面上有细节,例如ConnectionString 属性到“Microsoft.ACE.OLEDB.12.0”,对于Excel 97- 2003 工作簿 (.xls) 使用 "Excel 8.0",对于 Excel 工作簿 (.xlsx) 使用 "Excel 12.0 Xml" 等。注意:"Microsoft.JET.OLEDB" 不起作用。
我有一个遗留的 c++ 代码使用 adodb 读取 32 位 excel 文件 windows,它是 运行ning 文件,类似于:
#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),代码不能运行,错误信息是"the Provider could not be found" .
正在尝试解决问题,但在网上搜索后我有点困惑。
Microsoft FAQ About Windows DAC/MDAC 等似乎说,"Microsoft Data Access Components (MDAC)" 包括 ADO、OLE DB 和 ODBC;但 MDAC 已过时,现在该软件包称为 "Windows Data Access Components (Windows DAC)",它会自动安装在 windows 7.
中-- 所以我不需要在64位上安装MDAC Windows7,Microsoft Data Access Components (MDAC) 2.8 SP1上下载的是32位的?
但是我如何使用旧代码调用 msado15.dll
来读取 excel?
我可以将 32 位 MDAC 安装到 SysWOW64
文件夹并继续使用吗?但是这个32位的msado可以打开一个由64位excel创建的excel文件吗?
或者我应该使用 "Windows DAC" 中的其他一些 dll 在 64 位 windows 上使用 ado 吗?
或者,我必须放弃麻烦并找到其他方法来读取 C++ 中的 excel 文件?
如果有人碰到这里,要在安装了 office 64 位的 x64 windows 机器上访问 excel c++ 代码中的数据,您需要
- 下载Microsoft Access Database Engine 2016 Redistributable 并安装
- 在 C++ 代码中导入 msadoXX.dll
- 使用正确的连接字符串,在上面扩展"install instructions"的页面上有细节,例如ConnectionString 属性到“Microsoft.ACE.OLEDB.12.0”,对于Excel 97- 2003 工作簿 (.xls) 使用 "Excel 8.0",对于 Excel 工作簿 (.xlsx) 使用 "Excel 12.0 Xml" 等。注意:"Microsoft.JET.OLEDB" 不起作用。