次のjarファイルを使用しています。
dom4j-1.6.1.jar
poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
xmlbeans-2.3.0.jar
コード:
package ExcelTest;
import Java.io.File;
import Java.io.FileInputStream;
import Java.util.Iterator;
import org.Apache.poi.ss.usermodel.Cell;
import org.Apache.poi.ss.usermodel.Row;
import org.Apache.poi.xssf.usermodel.XSSFSheet;
import org.Apache.poi.xssf.usermodel.XSSFWorkbook;
public class Test
{
public static void main(String[] args)
{
try
{
FileInputStream file = new FileInputStream(new File("G:\\Selenium Jar Files\\TestData\\Data.xls"));
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext())
{
Cell cell = cellIterator.next();
//Check the cell type and format accordingly
switch (cell.getCellType())
{
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "t");
break;
}
}
System.out.println("");
}
file.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
コンパイルすると、次のエラーが表示されます。
org.Apache.poi.POIXMLException: org.Apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
at org.Apache.poi.util.PackageHelper.open(PackageHelper.Java:41)
at org.Apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.Java:218)
at ExcelTest.Test.main(Test.Java:21)
Caused by: org.Apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
at org.Apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.Java:199)
at org.Apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.Java:665)
at org.Apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.Java:274)
at org.Apache.poi.util.PackageHelper.open(PackageHelper.Java:39)
... 2 more
リンクを確認しましたが、問題を解決できませんでした。 Apache POIを使用してxlsxファイルを読み取るときの例外(org.Apache.poi.openxml4j.exception-コンテンツタイプなし[M1.13])
誰でも助けてくれますか?
xls
の明示的な実装poiクラスでxlsx
を読み取ろうとしています。
G:\ Selenium Jar Files\TestData\Data。xls
HSSFWorkbook
および HSSFSheet
クラスを使用するか、次のような共有インターフェイスを使用して実装をより一般化します。
変化する:
XSSFWorkbook workbook = new XSSFWorkbook(file);
に:
org.Apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(file);
そして変更:
XSSFSheet sheet = workbook.getSheetAt(0);
に:
org.Apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(0);
XLSファイルにアクセスしようとしています。ただし、XSSFWorkbookおよびXSSFSheetクラスオブジェクトを使用しています。これらのクラスは、主にXLSXファイルに使用されます。
XLSファイルの場合:HSSFWorkbook
&HSSFSheet
XLSXファイルの場合:XSSFSheet
&XSSFSheet
したがって、XSSFWorkbook
の代わりにHSSFWorkbook
を使用し、XSSFSheet
の代わりにHSSFSheet
を使用します。
したがって、変更後のコードは次のようになります。
HSSFWorkbook workbook = new HSSFWorkbook(file);
HSSFSheet sheet = workbook.getSheetAt(0);
これを試して:
package my_default;
import Java.io.File;
import Java.io.FileInputStream;
import Java.io.FileOutputStream;
import Java.util.Iterator;
import org.Apache.poi.ss.usermodel.Cell;
import org.Apache.poi.ss.usermodel.Row;
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;
public class Test {
public static void main(String[] args) {
try {
// Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook();
// Get first/desired sheet from the workbook
XSSFSheet sheet = createSheet(workbook, "Sheet 1", false);
// XSSFSheet sheet = workbook.getSheetAt(1);//Don't use this line
// because you get Sheet index (1) is out of range (no sheets)
//Write some information in the cells or do what you want
XSSFRow row1 = sheet.createRow(0);
XSSFCell r1c2 = row1.createCell(0);
r1c2.setCellValue("NAME");
XSSFCell r1c3 = row1.createCell(1);
r1c3.setCellValue("AGE");
//Save Excel to HDD Drive
File pathToFile = new File("D:\\test.xlsx");
if (!pathToFile.exists()) {
pathToFile.createNewFile();
}
FileOutputStream fos = new FileOutputStream(pathToFile);
workbook.write(fos);
fos.close();
System.out.println("Done");
} catch (Exception e) {
e.printStackTrace();
}
}
private static XSSFSheet createSheet(XSSFWorkbook wb, String prefix, boolean isHidden) {
XSSFSheet sheet = null;
int count = 0;
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
String sName = wb.getSheetName(i);
if (sName.startsWith(prefix))
count++;
}
if (count > 0) {
sheet = wb.createSheet(prefix + count);
} else
sheet = wb.createSheet(prefix);
if (isHidden)
wb.setSheetHidden(wb.getNumberOfSheets() - 1, XSSFWorkbook.SHEET_STATE_VERY_HIDDEN);
return sheet;
}
}