xls ファイルと xlsx ファイルの両方を読み取ることができるメソッドを作成する必要があります。私の調査によると、HSSF は xls を読み取るために使用され、XSSF は xlsx を読み取るために使用されます。両方のファイルを読み取るために使用できる Apache POI の一部はありますか? ss.usermodel にも遭遇しましたが、xls と xlsx の両方を楽しませる十分なコードが見つかりませんでした....
7 に答える
はい、両方のタイプで動作する POI によって提供される一連の新しいインターフェイスがあります。
WorkbookFactory.create() メソッドを使用して Workbook を取得します: http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html
次を使用して、ファイル拡張子に依存せずにExcelファイルをチェックできます(信頼性が低く、たとえば、多くのcsvファイルにはxls拡張子が付いていますが、POIでは解析できません):
//simple way to check for both types of excel files
public boolean isExcel(InputStream i) throws IOException{
return (POIFSFileSystem.hasPOIFSHeader(i) || POIXMLDocument.hasOOXMLHeader(i));
}
追加するだけのTomの回答のおかげで、follを使用してください。入力ストリームを取得するコードException in thread "main" java.io.IOException: mark/reset not supported
InputStream inputStream = new FileInputStream(new File("C:\\myFile.xls"));
if(! inputStream.markSupported()) {
inputStream = new PushbackInputStream(fileStream, 8);
}
1 つのオプションは、ファイル名を lastIndexOf でチェックすることです。.xls か xlsx かを確認し、if 条件を使用してそれに応じて切り替えます。poi に取り組んでから長い時間が経ちましたが、属性は .xls の HSSF と .xlsx の XSSF のようなものだと思います。http://poi.apache.org/ サイトを参照してください。 ?
読み取りプロセスを抽象化する方法を探しているようですが、XLS か XLSX かは問題ではなく、コードを変更せずに動作させたいと言っています。
Apache Tikaを見ることをお勧めします。これは、ファイルの読み取りとコンテンツの解析を抽象化する素晴らしいライブラリであり、POI と他の多くのライブラリを使用し、それらすべてに優れた抽象化を備えています。
PDF/XLS/XLSX の読み取りはテキスト ファイルの読み取りに似ており、すべての作業は舞台裏で行われます。
詳しくはこれを読んでください。http://www.searchworkings.org/blog/-/blogs/introduction-to-apache-tika