我修改了一小段代码,但无法运行。我总是发现一个例外:
保存失败:保存包时出错:重复条目:docProps/core.xml
错误抛出在这行:
wb.write(out);
我认为出现了这个例外,因为我不允许在同一个工作簿上读写,但是如果没有现有的Excel文件,我如何初始化新工作簿?
代码:(来自这里(感谢发起者):如何使用ApachePOI删除行)
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>
给我的POM,现在它产生了
线程“main”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.无效操作异常:名称为/docProps/core.xml的部件已经存在:包不得包含等效的部件名称,包实现者不得创建或识别具有等效部件名称的包
组织。阿帕奇。波伊。openxml4j。opc。OPCPackage。在org上添加PackagePart(OPCPackage.java:905)。阿帕奇。波伊。openxml4j。opc。拉链包装。saveImpl(ZipPackage.java:444)位于org。阿帕奇。波伊。openxml4j。opc。OPCPackage。在org上保存(OPCPackage.java:1467)。阿帕奇。波伊。这是一份完整的文件。在ExcelLineRemover上编写(POIXMLDocument.java:217)。lineRemover(ExcelLineRemover.java:28)在测试中。TestExcel。main(TestExcel.java:14)
我在不同的场景中遇到了同样的问题。我已经删除了文件(输入文件),并恢复了旧版本(文件快照——在运行这段代码之前)。它对我有用。
注意:我使用了*. xlsx格式。
问题找到了。
这不是代码的问题,而是excel文档本身的问题。
经过大量的实验,我发现,如果我在MS Excel中打开excel文档,并在不编辑它的情况下再次保存它,我的代码就可以工作了。
所以我认为问题在于excel文档的生成。(由工具自动生成)
我无法解释,因为所有其他select和insert语句都工作得很好。
我使用Apache POI libary导入、导出Excel表格到应用程序(tableView)。我有一些问题从应用程序中删除行在Excel。行的移除工作正常,但是如果我移除一行并重新启动应用程序,它会将最后一个条目导入两次。如果我删除了4或5个条目,在重新启动时,最后一个条目将显示4或5次。我认为最后一行的数字将不会保存或更新。删除excel文件中的行工作良好,只有在我的tableview中,在
我一直试图创建一个宏来格式化从特定外部源复制的表,问题是,一些单元格似乎从右向左填充,剩余的空间向左填充空格:
假设我有一张工作表--第一张--有5000多行(例如,每行“a”-“H”)。 在另一个工作表--第2号--中,我有一个“to-remove-list”--一个包含400个值的单列“a”,每个值包含字母数字字符串(例如:xxx1234)。 如果第'e'列包含“to-remove-list”(第2页的第'a'列)中的任何值,则必须删除第1页中的每一行。 删除整行,我的意思是删除该行并向上移动(不离开空
问题内容: 我有一个具有静态对象ArrayList的ClassA 现在,我要像这样从此列表中删除一个对象 这是用Meteorit类编写的。但是,当我想使用ArrayList中的对象时,它将引发异常。 我使用Iterator从ArrayList中删除对象,但是现在我不知道如何在这种情况下使用它。 问题答案: 这是因为某个线程实际上正在for每个循环中查看此列表,也许您正在尝试在for-each主体中
问题内容: 我有一个xml,如下所示: 现在,我想删除标记,但在此处保留内容“ ABCD”。或者有没有一种方法可以使用java从整个XML文件中删除。请帮忙。谢谢。 问题答案: 使用DOM4J或SAX解析器解析文档 从标签中获取价值 从值中删除所有html标签 JSoup三通 字符串替换 将新值设置为XML字体标签