如何使用ODBC连接Perl与Excel文件(* .xlsx或* .xls)?

我被要求考虑使用ODBC作为数据库驱动程序,以便能够在Excel工作簿上使用SQL。 我曾经见过一些使用OLE作为驱动程序的人,但是我所见过的唯一的ODBC演练是关于连接到MSSQL Server或MySQL。

我已经确认,我有ODBC设置,下面是我有可用的ODBC驱动程序。 任何人都可以谈到连接到XLS文件?

可用驱动程序

DBI Drivers: Chart, DBM, ExampleP, File, ODBC, Oracle, Proxy, SQLite, SQLite2, Sponge, mysql ODBC Drivers: DBI:ODBC:MS Access Database DBI:ODBC:Excel Files DBI:ODBC:dBASE Files DBI:ODBC:Visio Database Samples DBI:ODBC:Xtreme Sample Database 2003 DBI:ODBC:Xtreme Sample Database 2008 

test.pl里面

 my $dbh = DBI->connect('DBI:ODBC:Driver{Excel Files}MyExcelFile'); 

连接你需要连接string。 在那里你可以使用DSN版本的adhica描述,或者显示你可以使用什么驱动程序,并使用驱动程序的特定属性。 对于Excel,这可能看起来像:

 Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\MyExcel.xls;DefaultDir=c:\mypath; 

你可以在http://www.connectionstrings.com/excel#p86find更多的例子

我现在不在Windows机器的前面,但这大概是你需要做的。 findODBCpipe理员,并根据您是否将成为唯一运行您的Perl或其他人,以及创build一个用户或系统DSN。 从列表中selectExcel作为驱动程序,然后单击添加,然后填写您要求的任何必填字段 – 至less是excel文件的位置。 给DSN一个名字。

现在使用DBI-> connect('dbi:ODBC:DSN = name_you_gave_DSN');

连接后,请阅读odbc_out_connect_string属性,该属性返回ODBC输出连接string。 它看起来像这样:

Driver = {Excel Files}; workbook = c:\ x.xls; something = somethingelse;

您现在可以在连接调用中使用该string代替DSN = name_you_have_DSN,而不再需要您创build的DSN – 所谓的无DSN连接。

之后,有大量关于使用DBD :: ODBC的教程,包括http://www.easysoft.com/developer/languages/perl/index.html

我使用这里概述的Microsoft Excel驱动程序在所谓的“无DSN连接 ”,其中只有驱动程序是指定的,并指定Excel文件作为连接string本身的参数: http : //www.connectionstrings.com/excel -2007-ODBC /

  my $file = 'c:\temp\myfile.xslx'; my $dbh = DBI->connect('dbi:ODBC:driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ='.$file.';'); my $sth = $dbh->prepare( "SELECT * FROM [Sheet1\$]" ); $sth->execute(); while (my $row = $sth->fetchrow_hashref) { print Dumper( \$row ); } 

注意,如果你正在运行64位perl,需要访问一个32位的ODBC驱动程序。 你不能混合这样的位,并不得不求助于使用32位Perl或某种ODBC桥: 我可以使用32位ODBC驱动程序为我的64位应用程序