DBI::Excelを試す

id:likkさんに教えていただいたDBI::Excelを試してみた。まずは、試しにtest.xlsを作っておいてから、podに書いてあるとおりに。

#!c:/Perl/bin/perl
use strict;
use warnings;
use DBI;
my $hDb = DBI->connect("DBI:Excel:file=test.xls")
or die "Cannot connect: " . $DBI::errstr;
my $hSt = $hDb->prepare("CREATE TABLE a (id INTEGER, name CHAR(10))")
or die "Cannot prepare: " . $hDb->errstr();
$hSt->execute() or die "Cannot execute: " . $hSt->errstr();
$hSt->finish();
$hDb->disconnect();

実行するとエラーが発生した。

$ /c/Perl/bin/perl DBIsample.pl
install_driver(Excel) failed: Base class package "Spreadsheet::ParseExcel::Workbook" is empty.
(Perhaps you need to 'use' the module which defines that package first.)
at c:/Perl/site/lib/Spreadsheet/ParseExcel/SaveParser.pm line 14
BEGIN failed--compilation aborted at c:/Perl/site/lib/Spreadsheet/ParseExcel/SaveParser.pm line 14.
Compilation failed in require at c:/Perl/site/lib/DBD/Excel.pm line 18.
Compilation failed in require at (eval 4) line 3.
at DBIsample.pl line 5

DBIの実装クラスのロードの仕組みはよくわかってませんが、言われたとおり先にロードしてみると、エラーが出なくなった。

use Spreadsheet::ParseExcel; #追加

エラーは出なくなったけど、特にエクセルファイルが更新されてもいない。

idname

エクセルのシートにヘッダが書きこまれて、こんな状態になることを期待していたんですが、そんなことはしてくれないんですね。

insertを試してみる。

my $hDb = DBI->connect("DBI:Excel:file=test.xls")
or die "Cannot connect: " . $DBI::errstr;
my $hSt = $hDb->prepare("insert into a(id, name) values(1, '774')")
or die "Cannot prepare: " . $hDb->errstr();
$hSt->execute() or die "Cannot execute: " . $hSt->errstr();
$hSt->finish();
$hDb->disconnect();
$ /c/Perl/bin/perl DBIsample.pl
DBD::Excel::st execute failed: Can't call method "col_names" on unblessed reference at c:/Perl/site/lib/SQL/Statement.pm
line 1508.
Cannot execute: Can't call method "col_names" on unblessed reference at c:/Perl/site/lib/SQL/Statement.pm line 1508.

ん~。よくわからないので今日は終わり。

4件のコメント

  • Hi, I have exactly the same problems with the sample code of DBD::Excel. Did you get it working somehow? /stephan

  • Sorry, I don’t have any solutions.

  • PerltとDBIの組み合わせで使用するのは、 「DBD:データベース名」です。これを組み込む必要があります。

    Excelが相手の場合は、「DBD::Excel」となります。 コードを拝見すると、「”DBI:Excel:file=test.xls”」となっていますので、 エラーになるのは当たり前かと思います。

    kom1

  • 追記です。 「DBD::Excel」のドライバーを組み込む必要があります。 もちろんCPANにあるやつです。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

This site uses Akismet to reduce spam. Learn how your comment data is processed.