Home > Windows > Excel Archive
Excel Archive
【Perl】Spreadsheet::XLSXでセルの値に勝手にフリガナが付く件について
Excel 2007形式(XLSX)のファイルをPerlで扱う必要があったので調べてみると、「Spreadsheet::XLSX」というモジュールを見付けた。
Spreadsheet::XLSX - search.cpan.org
http://search.cpan.org/~dmow/Spreadsheet-XLSX-0.12/lib/Spreadsheet/XLSX.pm
そして次のようにXLSX形式のファイルを用意してスクリプトを実行してみたのだが、セルの値にフリガナがくっついて表示されてしまう *1 。
#!/usr/bin/perl -l
use Spreadsheet::XLSX;
my $excel = Spreadsheet::XLSX->new( "Book1.xlsx" );
my $sheet = $excel->{Worksheet}[0];
print $sheet->{Cells}[0][0]{Val};
実行結果
$ perl readexcel.pl 文字列モジレツ
XLSX形式についてよく知らなかったのでまずはそこから調べてみた。
- Comments: 0
- TrackBacks: 0
DATEDIF関数の怪(Excel)
Excelについて、「二つの日付を比較して、その間の月数を数える関数ってない?」という質問があった。ググってみると「DATEDIF関数」というのがそれらしい。
しかしこの関数、バグだらけである。年数と月数を調べるのは問題ないようだが、日数がひどい。試してみよう。
2008年12月15日から2010年2月2日までの月数及び日数を求める。結果は"13ヶ月と18日"になるはずだ。月数が"13"なのは問題ないとして、日数がむちゃくちゃである。
なぜこんなひどい実装になっているかについては、この10年の間にいろいろ考察がなされている *1 みたい。
それでもMicrosoftは直さないんだから、もうこの関数は使うなってことなのだろう。正確に日付計算したいならVBでも使ってDateTimeオブジェクトに変換しろってことなんかね。
おまけ。
Perlで計算すると全く問題なかった。(当たり前だ)
Excel(エクセル)基本講座:日付の関数
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/today.htm#datedif
しかしこの関数、バグだらけである。年数と月数を調べるのは問題ないようだが、日数がひどい。試してみよう。
2008年12月15日から2010年2月2日までの月数及び日数を求める。結果は"13ヶ月と18日"になるはずだ。月数が"13"なのは問題ないとして、日数がむちゃくちゃである。
なぜこんなひどい実装になっているかについては、この10年の間にいろいろ考察がなされている *1 みたい。
kt関数Ref:ktPeriodYMD
http://www.h3.dion.ne.jp/~sakatsu/ktfunc_ref0206.htm#DATEDIF
それでもMicrosoftは直さないんだから、もうこの関数は使うなってことなのだろう。正確に日付計算したいならVBでも使ってDateTimeオブジェクトに変換しろってことなんかね。
おまけ。
Perlで計算すると全く問題なかった。(当たり前だ)
#!/usr/bin/perl use Perl6::Say; use DateTime; my $a2 = DateTime->new( year => 2008, month => 12, day => 15 ); my $b2 = DateTime->new( year => 2010, month => 2, day => 2 ); say( ( $b2 - $a2 )->delta_months . " months" ); say( ( $b2 - $a2 )->delta_days . " days" ); # 実行結果 # 13 months # 18 days
- Comments: 0
- TrackBacks: 0
- Feeds
- CC Licence
-
このブログはクリエイティブ・コモンズでライセンスされています。
- Ferret アクセス解析
- W3C Validation
