有很多很好的方法可以做到这一点,其他人已经建议过。遵循“通过SQL轨道获取Excel数据”,下面是一些指针。
Excel具有“数据连接向导”,它使您可以从另一个数据源甚至在同一Excel文件中导入或链接。
作为Microsoft Office(和OS)的一部分,有两个感兴趣的提供程序:旧的“ Microsoft.Jet.OLEDB”和最新的“ Microsoft.ACE.OLEDB”。设置连接时(例如使用数据连接向导)查找它们。
一旦连接到Excel工作簿,工作表或范围就等同于表格或视图。工作表的表名称是在工作表的名称后附加一个美元符号(“ $”),并用方括号(“ [”和“]”)括起来;范围的名称,只是该范围的名称。要将未命名的单元格范围指定为记录源,请在方括号中的工作表名称末尾附加标准Excel行/列符号。
本机SQL将(或多或少是)Microsoft Access的SQL。(在过去,它被称为JET SQL;但是Access SQL已经发展了,我相信JET已经过时了。)
例如,阅读工作表: SELECT * FROM [Sheet1$]
例如,读取范围: SELECT * FROM MyRange
例如,读取一个未命名的单元格范围: SELECT * FROM [Sheet1$A1:B10]
有许多许多书籍和网站可用来帮助您完成所有细节。
===其他说明===
默认情况下,假定Excel数据源的第一行包含可用作字段名称的列标题。如果不是这种情况,则必须关闭此设置,否则第一行数据“消失”以用作字段名称。这是通过HDR= setting
在连接字符串的扩展属性中添加可选项来完成的。无需指定的默认值为HDR=Yes
。如果没有列标题,则需要指定HDR=No
;。提供商将您的字段命名为F1,F2等。
有关指定工作表的警告:提供程序假定您的数据表以指定工作表上最上方,最左侧,非空白的单元格开头。换句话说,您的数据表可以毫无问题地从第3行C列开始。但是,例如,您不能在单元格A1中数据的左上方和左上方输入workheeet标题。
关于指定范围的警告:当您将工作表指定为记录源时,提供程序会在空间允许的情况下在工作表中现有记录的下方添加新记录。当您指定范围(命名或未命名)时,Jet还会在空间允许的情况下在该范围内的现有记录下方添加新记录。但是,如果您在原始范围上重新查询,则结果记录集将不包括该范围之外的新添加的记录。
C的数据类型(值得尝试)REATE TABLE: Short, Long, Single, Double, Currency, DateTime, Bit, Byte, GUID, BigBinary, LongBinary, VarBinary, LongText, VarChar, Decimal
。
连接到“老技术” Excel文件(文件与XLS extention) Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties=Excel 8.0;
。将Excel 5.0源数据库类型用于Microsoft Excel 5.0和7.0(95)工作簿,并将Excel 8.0源数据库类型用于Microsoft Excel 8.0(97),9.0(2000)和10.0(2002)工作簿。
连接到“最新” Excel(具有xlsx文件扩展名的文件): Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;"
将数据视为文本:IMEX设置将所有数据视为文本。 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
(有关更多详细信息,请访问http://www.connectionstrings.com/excel)
有关更多信息,请参见http://msdn.microsoft.com/zh-CN/library/ms141683(v=sql.90).aspx和http://support.microsoft.com/kb/316934
通过VBA通过ADODB连接到Excel的详细信息,网址为http://support.microsoft.com/kb/257819
有关Microsoft JET 4的详细信息,请访问http://support.microsoft.com/kb/275561