[英]Java: remove lines from Excel
我修改了一小段代码,但无法运行它。 我总是检索异常:
保存失败:保存软件包时发生错误:重复项:docProps / core.xml
该行中将引发错误:
wb.write(out);
我认为引发了此异常,因为不允许在同一工作簿上读写,但是如何在没有现有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);
}
}
}
}
[EDIT 2016-06-21]:
我加了
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
到我的POM,现在它产生了
“线程“主”中的异常java.lang.NoSuchMethodError:org.apache.poi.util.POILogger.log(I [Ljava / lang / Object;)V“
更改为3.9版后,我又收到了旧错误,行为异常。
[EDIT 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'的部件已经存在:程序包中不得包含等效的部件名称,并且程序包实施者不得创建或识别具有等效部件名称的软件包。 [M1.12]位于
位于org.apache.poi.openxml4j的org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:444)的org.apache.poi.openxml4j.opc.OPCPackage.addPackagePart(OPCPackage.java:905) org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:217)处的opc.OPCPackage.save(OPCPackage.java:1467)在test.TestExcel.main(TestExcel.java)处的ExcelLineRemover.lineRemover(ExcelLineRemover.java:28)处:14)
发现问题。
这不是代码问题,而是excel文档本身的问题。
经过大量试验后,我发现,如果我在MS Excel中打开excel文档,然后再次保存而不编辑它,我的代码就可以正常工作。
因此,我认为问题在于在excel文档的生成中找到。 (由工具自动生成)
在不同的情况下,我有同样的问题。 我删除了文件(输入文件),并恢复了较旧的版本(文件快照-在运行代码之前)。 它为我工作。
注意:我使用了* .xlsx格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.