有很多很好的方法可以完成这项工作,其他人已经提出了建议。跟着“通过 SQL 轨迹获取 Excel 数据”,这里有一些提示。
-
Excel 具有“数据连接向导”,它允许您从另一个数据源或什至在同一个 Excel 文件中导入或链接。
-
作为 Microsoft Office(和操作系统)的一部分,有两个感兴趣的提供程序:旧的“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 中的数据上方和左侧键入工作表标题。
关于指定范围的注意事项:当您将工作表指定为记录源时,如果空间允许,提供程序会在工作表中现有记录的下方添加新记录。当您指定一个范围(已命名或未命名)时,Jet 还会在空间允许的情况下在该范围内现有记录的下方添加新记录。但是,如果您重新查询原始范围,则结果记录集不包括范围之外新添加的记录。
CREATE TABLE: Short, Long, Single, Double, Currency, DateTime, Bit, Byte, GUID, BigBinary, LongBinary, VarBinary, LongText, VarChar, Decimal 的数据类型(值得尝试)。
连接到“旧技术”Excel(扩展名为 xls 的文件):Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties=Excel 8.0;。对 Microsoft Excel 5.0 和 7.0 (95) 工作簿使用 Excel 5.0 源数据库类型,对 Microsoft Excel 8.0 (97)、9.0 (2000) 和 10.0 (2002) 工作簿使用 Excel 8.0 源数据库类型。
连接到“最新”的 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/en-US/library/ms141683(v=sql.90).aspx 和http://support.microsoft.com/kb/316934
通过 ADODB 通过 VBA 连接到 Excel,详细信息在 http://support.microsoft.com/kb/257819
http://support.microsoft.com/kb/275561 上的 Microsoft JET 4 详细信息