这几天在试用Spreadsheet::WriteExcel这个perl的module用的满顺的,因为之前习惯用PHP的Spreadsheet/Excel/Writer.php,虽然放弃了用PHP的这个模组写,因为太旧了,有些我在excel 2003要用的功能无法满足我,只好跳回来用perl来写,这时候的我其实对perl还满恐惧的,为啥不用java的apache POI呢?其实我也试过了,不过当我直接用范例来试的时候,发现有版本别的问题,在还搞不清楚下,我很快的就投降了,然后改投怀抱到perl这里来,用的真是令人愉快!
不过我用DBD:DB2这个模组时,一直产生DBD::DB2::db prepare failed: Error calling SQLGetInfo这类的错误,但是却没影响执行,先暂时忍受,有空再解决。
写入excel的问题解决了,接下来还需要读一个excel,这个任务可以交由Spreadsheet::ParseExcel,但是当我直接用网站上的这个例子测试时:
use strict; use Spreadsheet::ParseExcel; my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file); foreach my $sheet (@{$excel->{Worksheet}}) { printf("Sheet: %s\n", $sheet->{Name}); $sheet->{MaxRow} ||= $sheet->{MinRow}; foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) { $sheet->{MaxCol} ||= $sheet->{MinCol}; foreach my $col ($sheet->{MinCol} .. $sheet->{MaxCol}) { my $cell = $sheet->{Cells}[$row][$col]; if ($cell) { printf("( %s , %s ) => %s\n", $row, $col, $cell->{Val}); } } } }
真惨,一直出不了中文,我的是繁体中文的,Google了两天,一直不断的用简体中文的范例做测试,当然我有将CP936改成CP950,但是一堆问题迎面而来:
Use of uninitialized value in scalar assignment at D:/xampp/perl/site/lib/Spread
sheet/ParseExcel/Utility.pm
“\x{00aa}” does not map to big5-eten at D:/xampp/perl/site/lib/Spreadsheet/Parse
Excel/Utility.pm
举如这些的问题,以及unicode、utf-8、big5等等转码的想法都去测试,但是我努力了两天,都无效,最后开始其求神祝我一臂之力了,留言给两个网友,不过应该不会这么快有答案,就在快放弃时,又回到他的论坛讨论区去看看:
看到了这个回覆的留言http://www.cpanforum.com/posts/9292
ㄝ?怎有Cell->{_Value}这样的使用方式,不是一直都是用Cell->{Val}吗?这下有点眉目了,我回去再看说明,终于看到这两个属性的使用,当我改用_Value这个属性时,我终于解决的我的问题,这时的我有点Orz!如果有好好看手册,那就ok了,终于在下班前完成这个测试,明天放长假(很长的假喔!9天长不长)后再回公司继续写吧!
原来阿琪也有在写 Perl,刚好最近我在学(我是新手)。有机会可以交流一下 ^^
很好玩吧!