データベースとして扱わず、他の外部APIを使用せずにJavaでExcelシートを読み取る方法。
5 に答える
JavaでExcelシートを直接処理する方法はありません。Apache POIJavaAPIを使用する必要があります。
Apache POIは、さまざまなMicrosoftファイル形式、特にXLSやDOCXなどのOLE2およびOOXMLに基づくOffice関連のファイル形式を読み書きするためのJavaライブラリです。
Excelシートを読む一例を見てみましょう。xls
とxlsx
ファイル形式の両方をサポートします。
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
private Vector importExcelSheet(String fileName)
{
Vector cellVectorHolder = new Vector();
try
{
Workbook workBook = WorkbookFactory.create(new FileInputStream(fileName));
Sheet sheet = workBook.getSheetAt(0);
Iterator rowIter = sheet.rowIterator();
while(rowIter.hasNext())
{
XSSFRow row = (XSSFRow) rowIter.next();
Iterator cellIter = row.cellIterator();
Vector cellStoreVector=new Vector();
while(cellIter.hasNext())
{
XSSFCell cell = (XSSFCell) cellIter.next();
cellStoreVector.addElement(cell);
}
cellVectorHolder.addElement(cellStoreVector);
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
return cellVectorHolder;
}
上記のメソッドを呼び出すと、次のように返さVector
れます。
Vector dataHolder=importExcelSheet("Excel_file.xlsx");
注:Vector
ここで使用されているのはデモンストレーション用です。Javaでは廃止されているため、使用しないでください。Javaコレクションフレームワークで利用可能な他のタイプのコレクションを使用します。
できません。
JavaSEおよびEEAPIは、Excelスプレッドシートの読み取りをサポートしていません。
(まあ、Excelの仕様を読んで、独自のスプレッドシートリーダーを最初から開発するのに数か月かかると思います。しかし、それは労力の無駄だと思います。拒否した代替案の1つを使用してください。)
Re:スプレッドシートをCSVに変換し、それを読み取るアプローチ:
- これはスプレッドシートを読んでいません。
- スプレッドシートからCSVに変換するには、外部アプリケーション(Excelなど)が必要です。
- 損失があります。スプレッドシートの単純なデータコンテンツのみを読み取ることができます。他のすべてが失われます。
xlsファイルをcsvファイルに変換できます。JavaAPIはcsvファイルをサポートします。Standrt I/Oライブラリを使用してcsvファイルを読み取ることができます。
xlsおよびxlsxファイルを読み取るにはApachePOIを使用する必要があります
記憶の制約に応じて、HSSF、XSSF、SXSSFを使用できます。
これを試して
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class ReadExcel {
private String inputFile;
public void setInputFile(String inputFile) {
this.inputFile = inputFile;
}
public void read() throws IOException {
File inputWorkbook = new File(inputFile);
Workbook w;
try {
w = Workbook.getWorkbook(inputWorkbook);
// Get the first sheet
Sheet sheet = w.getSheet(0);
// Loop over first 10 column and lines
for (int j = 0; j < sheet.getColumns(); j++) {
for (int i = 0; i < sheet.getRows(); i++) {
Cell cell = sheet.getCell(j, i);
CellType type = cell.getType();
if (cell.getType() == CellType.LABEL) {
System.out.println("I got a label "
+ cell.getContents());
}
if (cell.getType() == CellType.NUMBER) {
System.out.println("I got a number "
+ cell.getContents());
}
}
}
} catch (BiffException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
ReadExcel test = new ReadExcel();
test.setInputFile("c:/temp/lars.xls");
test.read();
}
}