2013-06-19 122 views

回答

-3

這只是一種變通方法..

您可以轉換XLSB文件,XLSX文件,並使用POI從中提取數據。

你試過了嗎?我知道它不是正確的答案,但希望它有幫助。 :)

+0

是的,但問題是如何將xlsb編程轉換爲xlsx? – Martin

+0

Apache POI不支持.xlsb文件格式,所以將xlsx語法轉換爲xlsb是不可能的。我估計需要更多時間進行研究。 –

+0

是的,謝謝你的評論。 – Martin

0

在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 [email protected]; 

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}); 

從這裏,電子表格:: XLSX模塊讀取XLSX複製就好了。

0

POI開發者顯然沒有對支持XLSB計劃:http://mail-archives.apache.org/mod_mbox/poi-dev/201401.mbox/%3Calpine.DEB.2.02.1401250721280.31868%40urchin.earth.li%3E

這將是相當大量的工作,因爲你既需要更新記錄 應對較長/不同的格式,然後重新執行所有的操作步驟 以處理它的不同方式。迄今爲止,沒有人一直想 擺在所有工作非常邊際效益

有似乎是一個javascript library for reading xlsb,你可以用它來將數據導出爲JSON和從Java讀取。

+0

在POI上,我們只爲xlsb文件添加了只讀流分析器。它將與3.16-beta3一起提供。 –

0

Apache POI在3.16中添加了對流式讀取XLSB(無寫入支持)的支持。 Apache Tika 1.15現在支持從XLSB提取。