繁体   English   中英

Java:从Excel中删除行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM