【问题标题】:How do i connect Perl with an Excel file (*.xlsx or *.xls) using ODBC?如何使用 ODBC 将 Perl 与 Excel 文件(*.xlsx 或 *.xls)连接起来?
【发布时间】:2011-07-12 20:05:56
【问题描述】:

我被要求研究使用 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');

【问题讨论】:

  • 我正在寻找这个语法:Driver={Excel Files};workbook=c:\x.xls;something=somethingelse;这将(最终)合并到现有的报告实用程序中,我认为创建 DNS 条目不一定会奏效。如果可能的话,我想将它与后面的答案结合起来,但现在我会为我的 POC 研究这个。如果其中任何一个有效,我会投票。

标签: perl excel odbc dbi


【解决方案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 文件};workbook=c:\x.xls;something=somethingelse;

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

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

【讨论】:

  • 我无法让您的示例正常工作,而且我已经访问过easysoft 网站。不过,谢谢你的想法。他们帮助我们解决了另一个问题。
  • 我无法使用您提供的连接字符串连接到 xls 文件。虽然它非常接近所需的字符串,所以为你 +1。
【解决方案2】:

我在所谓的“DSN-less connection”中使用此处概述的 Microsoft Excel 驱动程序,其中仅指定了驱动程序,并且您将 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

【讨论】:

    【解决方案3】:

    要连接,您需要连接字符串。在那里,您可以使用所描述的 DSN 版本,或者显示您可以使用的驱动程序和使用驱动程序特定属性。对于 Excel,这可能如下所示:

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

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

    【讨论】:

    • 澄清一下,我的回答会给你你引用的字符串,然后你可以(如果你想)删除 DSN。
    • 太棒了!这次真是万分感谢!效果很好。
    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多