Excel 电子表格的 ADO 记录集在 Excel 2007 年正确打开,在 Excel 2013 年缺少参数
ADO Recordset to Excel spreadsheet opens properly in Excel 2007, has a missing parameter in Excel 2013
我的电子表格正在使用 ADO 从另一个电子表格读取数据。 VBA 代码在 MS Excel 2007 中正常工作。但是,在 MS 2013 中,打开记录集会生成错误:No value given for one or more required parameters.
出错的行是:
recset.Open sqlCommand, _
conn, adOpenStatic, adLockReadOnly, adCmdText
我仔细检查了我的两个变量。
sqlCommand
具有(经过处理的)值:SELECT * FROM [Sheet1$] WHERE [F1] IS NOT NULL ORDER BY [F1] ASC
.
conn
是 Connection
object,具有(消毒)值:Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\user\Documents\path\workbook_to_read.xlsx;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False;
其他三个参数是ADO常量。
我最好的猜测是 Provider
是错误的版本,Excel 或 ADO。我不知道正确的版本是什么,也不知道如何使代码在两种环境下都能工作。
编辑并捂脸:
我正在阅读的大多数 Excel 文件的前两个字段都没有 headers。这一个确实如此,我不得不用正确的字段名称替换 [F1]
。 请关闭。
嗨,我正在寻找一些答案,我想到了这个 Treating data as text
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
当我 运行 在 Excel
中进行一些测试时,它显示:
Provider=Microsoft.ACE.OLEDB.12.0 ...
Extended Properties=""HDR=YES;""; ...
Jet OLEDB:Bypass ChoiceField Validation=False;
所以我认为您缺少的参数必须是 Extended Properties
我正在读取的大多数 Excel 文件的前两个字段都没有 headers。这个可以,我必须用正确的字段名称替换 [F1]
。
(我在 2015 年 7 月 10 日编辑后粘贴的答案。)
我的电子表格正在使用 ADO 从另一个电子表格读取数据。 VBA 代码在 MS Excel 2007 中正常工作。但是,在 MS 2013 中,打开记录集会生成错误:No value given for one or more required parameters.
出错的行是:
recset.Open sqlCommand, _
conn, adOpenStatic, adLockReadOnly, adCmdText
我仔细检查了我的两个变量。
sqlCommand
具有(经过处理的)值:SELECT * FROM [Sheet1$] WHERE [F1] IS NOT NULL ORDER BY [F1] ASC
.conn
是Connection
object,具有(消毒)值:Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\user\Documents\path\workbook_to_read.xlsx;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False;
其他三个参数是ADO常量。
我最好的猜测是 Provider
是错误的版本,Excel 或 ADO。我不知道正确的版本是什么,也不知道如何使代码在两种环境下都能工作。
编辑并捂脸:
我正在阅读的大多数 Excel 文件的前两个字段都没有 headers。这一个确实如此,我不得不用正确的字段名称替换 [F1]
。 请关闭。
嗨,我正在寻找一些答案,我想到了这个 Treating data as text
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
当我 运行 在 Excel
中进行一些测试时,它显示:
Provider=Microsoft.ACE.OLEDB.12.0 ...
Extended Properties=""HDR=YES;""; ...
Jet OLEDB:Bypass ChoiceField Validation=False;
所以我认为您缺少的参数必须是 Extended Properties
我正在读取的大多数 Excel 文件的前两个字段都没有 headers。这个可以,我必须用正确的字段名称替换 [F1]
。
(我在 2015 年 7 月 10 日编辑后粘贴的答案。)