6

POI 3.9 を使用して xlsx からデータを読み取っています。しかし今、問題に直面しています。POI は xlsb ファイルをサポートしていないため、プログラムで xlsb からデータを読み取る必要があります。プログラムでxlsbからデータを読み取る方法を知っている人はいますか? 感謝。

4

5 に答える 5

1

Perl では、Win32::OLEモジュールが XLSB を XLSX に変換できます。欠点: MS Excel をインストールする必要があります。これが私が使用したものに基づくサンプルコードです...

use File::Spec::Functions qw/rel2abs/;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Excel';
use Win32::OLE::Variant;

Win32::OLE->Option( Warn => 3 );

my $xlsb = 'C:\Users\wohlfarj\Documents\File.xlsb';

# This block uses an already open instance of Excel, or starts a new one if it isn't already open.
my $excel;
eval { $excel = Win32::OLE->GetActiveObject('Excel.Application') };
  die 'MS Excel not installed' if $@;

unless (defined $excel) {
  $excel = Win32::OLE->new( 'Excel.Application', 'Quit' )
    or die 'Cannot start MS Excel';
}

# After all of the setup, converting the file is painless.
my $xlsx = rel2abs( $xlsb );
$xlsx =~ s/\.xlsb$/\.xlsx/i;

my $workbook = $excel->Workbooks->Open( {FileName => rel2abs( $xlsb )} );
$workbook->SaveAs( {FileFormat => xlOpenXMLWorkbook, Filename => $xlsx} );
$workbook->Close( {SaveChanges => xlDoNotSaveChanges} );

ここから、Spreadsheet::XLSXモジュールは XLSX コピーを問題なく読み取ります。

于 2013-10-08T16:42:58.023 に答える
-3

これは単なる回避策です..

xlsb ファイルを xlsx ファイルに変換し、POI を使用してそこからデータを抽出できます。

試してみましたか?正しい答えではないことは承知していますが、お役に立てば幸いです。:)

于 2013-06-19T06:42:45.063 に答える