2016-03-08 137 views
0

我在Windows 10 64位机器上使用Office 2016 32位和SQL Server 64位。我已经安装了驱动程序Microsoft Access数据库引擎2010可再发行版通过SQL Server中的链接服务器访问OPEN Excel表

以下代码允许我成功读取来自SQL Server的Excel工作簿中已关闭的表中的行。

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO 
EXEC sp_addlinkedserver 
    @server = 'ExcelServer2', 
    @srvproduct = 'Excel', 
    @provider = 'Microsoft.ACE.OLEDB.12.0', 
    @datasrc = 'C:\Temp\book2.xlsx', 
    @provstr = 'Excel 12.0;IMEX=1;HDR=YES;' 
SELECT * FROM ExcelServer2...[Sheet1$] 

但是,如果工作簿是开放然后我得到以下错误:

Msg 7399, Level 16, State 1, Line 1 
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "excelserver2" reported an error. The provider did not give any information about the error. 
Msg 7303, Level 16, State 1, Line 1 
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "excelserver2". 

是否有从一个开放工作簿读取行什么办法?

回答

0

这不是一个真正的答案,但它是一个很好的解决方法。

我有两份工作簿。

  1. 一个副本被称为“MyFile.xlsm”这是我保持开放的全部时间 - 这,我的工作和更新
  2. 一个副本叫我一直全封闭的时间“MyFileCopy.xlsm” - 这连接到数据库

我在打开的工作簿工作,当我想,我只是运行下面的宏操作将更新关闭的工作簿,而不会影响我打开的工作簿

Sub copyFile() 
    ActiveWorkbook.SaveCopyAs "C:\MyDirectory\MyFileCopy.xlsm" 
End Sub