我有一个excel文件“ test.xlsx”,其中包含一个名为“ SheetName”的工作表,其中包含一个名为“ NamedRange”的命名范围。
我想用Visual Basic编写一个脚本,以将这些命名范围导入到SQL数据库中。到目前为止,我已经尝试过openrowset,但是找不到正确的语法来引用命名范围。无效的查询示例:
USE [Test_DataBase]
GO
SELECT * INTO New
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=D:\Test.xlsx', NamedRange);
GO
此错误是:链接服务器“(null)”的OLE DB提供程序“ Microsoft.ACE.OLEDB.12.0”不包含表“ NamedRange”。该表不存在,或者当前用户对该表没有权限。
但是我可以使用以下方式导入完整的工作表:
USE [Test_DataBase]
GO
SELECT * INTO New
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=D:\Test.xlsx', SheetName$);
GO
我也尝试过:
USE [Test_DataBase]
GO
SELECT * INTO New
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=D:\Test.xlsx', SheetName$NamedRange);
GO
但是会产生以下错误:链接服务器“(null)”的OLE DB提供程序“ Microsoft.ACE.OLEDB.12.0”不包含表“ SheetName $ NamedRange”。该表不存在,或者当前用户对该表没有权限。
那么,openrowset实际上可以用来引用命名范围吗?如果没有,我可以改用其他方法吗?
*这是我的第一个问题,希望我已经足够清楚并且没有违反任何规则!
克雷格
答案 0 :(得分:0)
答案 1 :(得分:0)
首先从下面的链接安装驱动程序。
https://www.microsoft.com/en-us/download/details.aspx?id=13255
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
USE YourDatabase;
GO
SELECT * INTO Table1
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=C:\your_path\test.xlsx', [Sheet1$nr]);
GO
-- 'nr' is your named range
有关更多详细信息,请参见这些链接。
http://www.ashishblog.com/importexport-excel-xlsx-or-xls-file-into-sql-server/
https://www.excel-sql-server.com/excel-sql-server-import-export-using-vba.htm