Как мне связать Perl с файлом Excel (* .xlsx или * .xls), используя ODBC? - PullRequest
2 голосов
/ 13 июля 2011

Меня попросили изучить использование ODBC в качестве драйвера базы данных, чтобы можно было использовать SQL в книге Excel. Я видел множество людей, использующих OLE в качестве драйвера, но единственные прохождения ODBC , которые я видел, касаются подключения к серверу MSSQL или 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');

Ответы [ 3 ]

1 голос
/ 20 октября 2015

Я использую драйвер Microsoft Excel, описанный здесь, в так называемом « DSN-без подключения », где указан только драйвер, и вы указываете файл 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: Могу ли я использовать 32-битный драйвер ODBC для моего 64-битного приложения

Совсем недавно мне пришлось установить Microsoft Access Redistributable, чтобы получить драйвер Excel для Windows 10: https://stackoverflow.com/a/54757113/74585

1 голос
/ 13 июля 2011

Я сейчас не перед машиной с Windows, но это примерно то, что вам нужно сделать.Найдите ODBC Administrator и, в зависимости от того, будете ли вы единственным, кто использует Perl или другие, а также создайте DSN USER или SYSTEM.Выберите Excel в качестве драйвера из списка и нажмите кнопку «Добавить», затем заполните необходимые поля - по крайней мере, местоположение файла Excel.Дайте DSN имя.

Теперь используйте DBI-> connect ('dbi: ODBC: DSN = name_you_gave_DSN');

После подключения прочитайте об атрибуте odbc_out_connect_string, который возвращает строку подключения ODBC out,Это будет выглядеть примерно так:

Driver = {Excel Files}; рабочая книга = c: \ x.xls; что-то = что-то другое;

Вы можете использовать эту строку вместо DSN = name_you_have_DSN вподключите вызов сейчас, и вам больше не понадобится созданный вами DSN - так называемое подключение без DSN.

После этого существует множество учебных пособий по использованию DBD :: ODBC, в том числе по http://www.easysoft.com/developer/languages/perl/index.html

0 голосов
/ 13 июля 2011

Для подключения необходима строка подключения.Там вы можете использовать описанную версию DSN ad bihica или показать, какой драйвер вы можете использовать, и использовать свойства, относящиеся к драйверу.Для Excel это может выглядеть так:

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

Другие примеры вы найдете по адресу: http://www.connectionstrings.com/excel#p86

...