Java:从Excel中删除行

我修改了一小段代码,但无法运行。 我总是检索一个exception:

保存失败:保存包时发生错误:重复条目:docProps / core.xml

错误是在这一行中引发的:

wb.write(out); 

我认为这个exception是由于我不允许在同一个工作簿上读写而产生的,但是如何在没有现有的Excel文件的情况下初始化一个新的工作簿呢?

代码:(这是从这里(感谢发起人): 如何删除使用apache poi行 )

 public class TestExcel{ public static void main(String[] args) { ExcelLineRemover elr = new ExcelLineRemover(); elr.lineRemover("testFiles/Test_orig.xlsx", "testFiles/Test_mod.xlsx"); } } 

 import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class ExcelLineRemover { public void lineRemover(String fileInName, String fileOutName) { try { File file = new File(fileInName); Workbook wb = WorkbookFactory.create(file); Sheet sheet = wb.getSheetAt(0); removeRow(sheet, 3); File fileOut = new File(fileOutName); OutputStream out = new FileOutputStream(fileOut); wb.write(out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } public void removeRow(Sheet sheet, int rowIndex) { int lastRowNum = sheet.getLastRowNum(); if (rowIndex >= 0 && rowIndex < lastRowNum) { sheet.shiftRows(rowIndex + 1, lastRowNum, -1); } if (rowIndex == lastRowNum) { Row removingRow = sheet.getRow(rowIndex); if (removingRow != null) { sheet.removeRow(removingRow); } } } } 

[编辑2016-06-21]:

我补充说

 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> 

到我的聚甲醛,现在它生产

“线程中的exception”main“java.lang.NoSuchMethodError:org.apache.poi.util.POILogger.log(I [Ljava / lang / Object;)V”

更改为3.9版后,我得到了旧的错误,奇怪的行为。

[编辑2016-06-22]将我的代码移到一个单独的项目。 我改为poi版本3.14

POM:

 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency> 

这是我包括的唯一的依赖。 但是我仍然有一个类似的错误:

org.apache.poi.openxml4j.exceptions.InvalidOperationException:名称为“/docProps/core.xml”的部分已经存在:包不应包含等效的部件名称,包实现者不得创build或识别具有等同部件名称的包。 [M1.12] at

org.apache.poi.openxml4j.opc.OPCPackage.addPackagePart(OPCPackage.java:905)at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:444)at org.apache.poi.openxml4j。 opc.OPCPackage.save(OPCPackage.java:1467)at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:217)at ExcelLineRemover.lineRemover(ExcelLineRemover.java:28)at test.TestExcel.main(TestExcel.java :14)

问题被发现。

这不是代码问题,这是Excel文档本身的一个问题。

经过大量的实验后,我发现,如果我打开MS Excel中的Excel文档,只需保存一遍而不用编辑它,我的代码就可以工作了。

所以我觉得问题是在excel文件的代中find。 (这是由一个工具自动生成的)

我在不同的情况下有同样的问题。 我已经删除了文件(input文件),并恢复了旧版本(文件快照 – 在运行这段代码之前)。 它为我工作。

注意:我使用了* .xlsx格式。