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.

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

2件のコメント

  • 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.

コメントする

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


The reCAPTCHA verification period has expired. Please reload the page.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください