簡體   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