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

问题描述 投票:2回答:3

我被要求考虑使用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');
perl excel odbc dbi
3个回答
0
投票

要连接你需要连接字符串。在那里,您可以使用描述的DSN版本广告,或显示您可以使用的驱动程序并使用驱动程序特定的属性。对于Excel,这可能看起来像:

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

您将在以下位置找到更多示例:http://www.connectionstrings.com/excel#p86


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;

您现在可以在connect call中使用该字符串而不是DSN = name_you_have_DSN,您将不再需要您创建的DSN - 所谓的无DSN连接。

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


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

© www.soinside.com 2019 - 2024. All rights reserved.