通过SQL Server中的链接服务器访问OPEN Excel表

时间:2016-03-08 16:58:37

标签: sql-server excel linked-server

我在Windows 10 64位计算机上使用Office 2016 32位和SQL Server 64位。我已安装驱动程序 Microsoft Access数据库引擎2010可再发行组件

以下代码允许我从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".

有没有办法从打开工作簿中读取行?

1 个答案:

答案 0 :(得分:0)

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

我有两份工作簿。

  1. 一个名为“MyFile.xlsm”的副本,我一直打开 - 这是我的工作和更新
  2. 一个名为“MyFileCopy.xlsm”的副本,我一直关闭 - 这是连接到数据库
  3. 我在打开的工作簿上工作,当我想要时,我只运行以下宏来更新已关闭的工作簿,而不会影响我的打开工作簿

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