DBI::Excelを試す
2007/05/04
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; #追加
エラーは出なくなったけど、特にエクセルファイルが更新されてもいない。
id | name |
---|---|
エクセルのシートにヘッダが書きこまれて、こんな状態になることを期待していたんですが、そんなことはしてくれないんですね。
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.
ん~。よくわからないので今日は終わり。
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.