使用adodb读取64位Windows 7中的excel文件的C++?
问题描述:
我用ADODB来读取Excel在32位Windows文件,它的运行文件所遗留的C++代码,它是这样的:使用adodb读取64位Windows 7中的excel文件的C++?
#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),代码无法运行,错误消息是“无法找到提供程序”。
试图解决这个问题,但在互联网搜索后,我有点困惑。
微软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文件?
答
的情况下,在这里的任何一个碰撞,以获得出色的C数据++代码X64的Windows机器上安装的Office 64位,你需要
- 下载Microsoft Access Database Engine 2016 Redistributable 并安装
- 进口msadoXX。在C++代码中使用dll
- 使用正确的连接字符串,在上面的页面中展开“安装说明”,有详细信息如ConnectionString属性为“Microsoft.ACE.OLEDB.12.0”,用于Excel 97-2003工作簿(.xls)的使用“Excel 8.0”,Excel工作簿(.xlsx)使用“Excel 12.0 Xml”等。注意:“Microsoft。 JET.OLEDB“不起作用。