我被要求使用 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');
答案 0 :(得分:1)
我现在不在Windows机器前面,但这大概就是你需要做的。找到ODBC管理器,并根据您是否将成为运行Perl或其他人的唯一一个创建USER或SYSTEM DSN。从列表中选择Excel作为驱动程序,然后单击添加,然后填写要求的任何必填字段 - 至少是excel文件的位置。为DSN命名。
现在使用DBI-> connect('dbi:ODBC:DSN = name_you_gave_DSN');
连接后,请阅读odbc_out_connect_string属性,该属性返回ODBC输出连接字符串。它看起来像:
Driver = {Excel Files}; workbook = c:\ x.xls; something = somethingelse;
您现在可以在连接呼叫中使用该字符串而不是DSN = name_you_have_DSN,您将不再需要您创建的DSN - 所谓的无DSN连接。
之后有很多关于使用DBD :: ODBC的教程,包括http://www.easysoft.com/developer/languages/perl/index.html
的教程答案 1 :(得分:1)
我使用此处列出的Microsoft Excel驱动程序称为" DSN-less connection"只指定驱动程序并在连接字符串本身中将Excel文件指定为参数: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桥:Can i use a 32 Bit ODBC Driver for my 64 Bit app
最近,我不得不安装Microsoft Access Redistributable以在Windows 10上获取Excel驱动程序:https://stackoverflow.com/a/54757113/74585
答案 2 :(得分:0)
连接你需要连接字符串。在那里,您可以使用描述的DSN版本广告,或显示您可以使用的驱动程序并使用驱动程序特定的属性。对于Excel,这可能看起来像:
Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\MyExcel.xls;DefaultDir=c:\mypath;
找到更多示例