Java:从Excel中删除行
我修改了一小段代码,但无法运行。 我始终检索到一个异常: 保存失败:保存包时出错:重复条目:docProps/core.xml 此行中会引发错误:Java:从Excel中删除行,java,excel,apache-poi,Java,Excel,Apache Poi,我修改了一小段代码,但无法运行。 我始终检索到一个异常: 保存失败:保存包时出错:重复条目:docProps/core.xml 此行中会引发错误: wb.write(out); 我认为出现了这个异常,因为我不允许在同一工作簿上读写,但是如果没有现有的Excel文件,我如何初始化新工作簿 代码:(来自此处(感谢发起人):) 及 导入java.io.File; 导入java.io.FileOutputStream; 导入java.io.OutputStream; 导入org.apache.poi.
wb.write(out);
我认为出现了这个异常,因为我不允许在同一工作簿上读写,但是如果没有现有的Excel文件,我如何初始化新工作簿
代码:(来自此处(感谢发起人):)
及
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.OutputStream;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.ss.usermodel.WorkbookFactory;
公共类ExcelLineRemover{
公共无效lineRemover(字符串fileInName、字符串fileOutName){
试一试{
File File=新文件(fileInName);
工作簿wb=WorkbookFactory.create(文件);
Sheet Sheet=wb.getSheetAt(0);
拆卸工具(第3页);
File fileOut=新文件(fileOutName);
OutputStream out=新文件OutputStream(fileOut);
wb.写(出);
out.flush();
out.close();
}捕获(例外e){
e、 printStackTrace();
}
}
公共空隙清除器OW(图纸、int行索引){
int lastRowNum=sheet.getLastRowNum();
如果(rowIndex>=0&&rowIndex
[编辑2016-06-21]:
我补充说
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
org.apache.poi
poi ooxml
3.14
对我的POM来说,现在它产生了
线程“main”java.lang.NoSuchMethodError中的“异常”:
org.apache.poi.util.POILogger.log(I[Ljava/lang/Object;)V“
在转换到3.9版后,我又恢复了旧的错误,即奇怪的行为
[编辑2016-06-22]
将我的代码移动到一个单独的项目中。
我改为poi版本3.14
POM:
org.apache.poi
poi ooxml
3.14
这是我包含的唯一依赖项。
但我仍然得到一个类似的错误:
org.apache.poi.openxml4j.exceptions.invalidoOperationException:一部分
名为“/docProps/core.xml”的包已存在:包不应
包含等效部件名称,且包实施者不得
创建或识别具有等效零件名称的包装。[M1.12]位于
org.apache.poi.openxml4j.opc.OPCPackage.addPackagePart(OPCPackage.java:905)
在
org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:444)
位于org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1467)
在org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:217)上
lineRemover.lineRemover(ExcelLineRemover.java:28)位于
test.TestExcel.main(TestExcel.java:14)
我在不同的场景中遇到了相同的问题。我删除了文件(输入文件),并恢复了旧版本(文件快照-在运行代码之前)。这对我来说很有效 注意:我使用了*.xlsx格式。发现了问题 这不是代码的问题,而是excel文档本身的问题 经过大量实验,我发现,如果我在MS excel中打开excel文档,只需再次保存而不进行编辑,我的代码就可以工作
因此,我认为问题在于如何生成excel文档(由工具自动生成)您的代码对我来说运行良好(使用xssf poi包)。您可以编辑您的帖子并向我们展示如何调用这些方法吗?您是否为
lineRemover
提供了正确的参数?请同时指出产生错误的行。我扩展了代码
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);
}
}
}
}
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>