有很多好方法可以做到这一点,其他人已经提出了这一点.下面是"通过SQL跟踪获取Excel数据"的一些提示.
Excel有"Data Connection Wizard",允许您从另一个数据源导入或链接,甚至在同一个Excel文件中.
作为微软Office(和操作系统)的一部分,有两个令人感兴趣的Provider :旧的"Microsoft.Jet.OLEDB"和最新的"Microsoft.ACE.OLEDB".例如,在设置连接时使用向导查找数据.
一旦连接到Excel工作簿,工作表或区域就相当于表或视图.工作表的表名是工作表的名称,后面附加了一个美元符号($),并用方括号("["和"])包围;对于一个范围,它只是该范围的名称.要指定未命名的单元格区域作为记录源,请在方括号中的工作表名称末尾附加标准Excel行/列符号.
本机SQL将(或多或少)成为Microsoft Access的SQL.(在过go ,它被称为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还会在空间允许的情况下,在该范围内现有记录的下方添加新记录.但是,如果重新查询原始范围,则生成的记录集不包括该范围之外新添加的记录.
数据类型(值得try )为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
通过VBA通过ADODB连接到Excel,详情见http://support.microsoft.com/kb/257819
微软JET 4详情http://support.microsoft.com/kb/275561