Java Excel POI在某些行已存在时意外缺少行
有人已经看到这个错误了吗 我刚创建HSSF工作簿时就得到了它Java Excel POI在某些行已存在时意外缺少行,java,excel,apache-poi,Java,Excel,Apache Poi,有人已经看到这个错误了吗 我刚创建HSSF工作簿时就得到了它 try { LOGGER.info("Open Excel file: " + filename); InputStream inputStream = new FileInputStream(filename); Workbook wb = new HSSFWorkbook(inputStream); Sheet sheet = wb.getSheetAt(
try {
LOGGER.info("Open Excel file: " + filename);
InputStream inputStream = new FileInputStream(filename);
Workbook wb = new HSSFWorkbook(inputStream);
Sheet sheet = wb.getSheetAt(0);
/* save excel */
FileOutputStream fileOut = new FileOutputStream(filenameOutput);
wb.write(fileOut);
fileOut.close();
wb.close();
inputStream.close();
} catch (IOException e1) {
LOGGER.log(Level.SEVERE, e1.getMessage(), e1);
}
新HSSF工作簿(inputstream)上出现错误。
线程“main”java.lang.RuntimeException中的异常:当某些行已经存在时意外缺少行
位于org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:212)
在org.apache.poi.hssf.usermodel.HSSFSheet上(HSSFSheet.java:137)
在org.apache.poi.hssf.usermodel.HSSFWorkbook上(HSSFWorkbook.java:338)
在org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:289)
位于org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:224)
在org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:382)
在org.apache.poi.hssf.usermodel.HSSFWorkbook上(HSSFWorkbook.java:364)
有什么想法吗
我在网上看到过这个问题,但他们没有给出很好的答案
我使用POI 3.12
更新:我的excel包含53行和数百列,所以他不是空的。excel是使用业务对象生成的,没有解决方案
HSSFSheet的源代码是好的,我找到了解决方案 升级到3.14解决问题 3.13和之前版本中的异常由 但是在3.14 正如他们所说,有些工具跳过了RowRec,在我的例子中,就是在我使用Buisness对象生成.xls时,例如:
Workbook workbook = null;
try {
workbook = WorkbookFactory.create(is);
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
Sheet sheet = workbook.getSheetAt(0);
XSSF或HSSF不重要,两者都应该很好地工作。提供更多内容来支持您的答案,仅仅添加一个代码片段似乎不是一个好答案。想想你,我的英语很差!
RowRecord row = sheet.getNextRow();
boolean rowRecordsAlreadyPresent = row != null;
207 if (hrow == null) {
208 // Some tools (like Perl module Spreadsheet::WriteExcel - bug 41187) skip the RowRecords
209 // Excel, OpenOffice.org and GoogleDocs are all OK with this, so POI should be too.
210 if (rowRecordsAlreadyPresent) {
211 // if at least one row record is present, all should be present.
212 throw new RuntimeException("Unexpected missing row when some rows already present");
213 }
if (hrow == null) {
/* we removed this check, see bug 47245 for the discussion around this
// Some tools (like Perl module Spreadsheet::WriteExcel - bug 41187) skip the RowRecords
// Excel, OpenOffice.org and GoogleDocs are all OK with this, so POI should be too.
if (rowRecordsAlreadyPresent) {
// if at least one row record is present, all should be present.
throw new RuntimeException("Unexpected missing row when some rows already present");
}*/
// create the row record on the fly now.
RowRecord rowRec = new RowRecord(cval.getRow());
sheet.addRow(rowRec);
hrow = createRowFromRecord(rowRec);
}
Workbook workbook = null;
try {
workbook = WorkbookFactory.create(is);
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
Sheet sheet = workbook.getSheetAt(0);