Java 使用apache元模型更新excel文件
我正试图将Apache元模型合并到一个项目中,并不断遇到一个奇怪的问题。我在代码中更新Excel电子表格行。代码找到正确的行,删除它,然后将该行(带有我的更新)附加到电子表格的底部。我希望更新发生在适当的位置,相同的数据保留在同一行中。我认为这是我做错了什么,然后建立了一个愚蠢的简单项目来复制这种行为。不幸的是,问题依然存在 以下是xlsx文件:Java 使用apache元模型更新excel文件,java,excel,apache,metamodel,apache-metamodel,Java,Excel,Apache,Metamodel,Apache Metamodel,我正试图将Apache元模型合并到一个项目中,并不断遇到一个奇怪的问题。我在代码中更新Excel电子表格行。代码找到正确的行,删除它,然后将该行(带有我的更新)附加到电子表格的底部。我希望更新发生在适当的位置,相同的数据保留在同一行中。我认为这是我做错了什么,然后建立了一个愚蠢的简单项目来复制这种行为。不幸的是,问题依然存在 以下是xlsx文件: Name Address City State Zip Bob 123 Main St.
Name Address City State Zip
Bob 123 Main St. Norman OK 11111
Fred 989 Elm Street Chicago IL 22222
Mary 555 First Street San Francisco CA 33333
现在,我想将Bob的Zip更新为“无”
很简单吧?不。
结果是:
Name Address City State Zip
<blank line>
Fred 989 Elm Street Chicago IL 22222
Mary 555 First Street San Francisco CA 33333
Bob 123 Main St. Norman OK None
名称地址城市州邮政编码
伊利诺伊州芝加哥市埃尔姆街989号弗雷德2222
玛丽555旧金山第一街CA 33333
鲍勃123主街圣诺曼OK无
我错过了一些简单的东西吗?文档非常稀少,但是我已经阅读了互联网上提供的关于这个软件包的所有内容。谢谢你抽出时间。你没有错过任何东西。ExcelDataContext没有提供自己的更新行为。默认情况下,使用apache元模型的默认存储无关实现来更新数据。UpdateCallback的实现使用DeleteAndInsertCallback,这会导致您观察到的行为。它选择要更新的行,在内存中用新值更新它,删除原始行并插入更新的行(最后插入底部,这是ExcelDataContext行为)。 你可以在 附上您的示例代码和数据。 最好的方法是在测试中失败的单元测试
派对迟到了,但我最近碰到了这个问题,还没有在其他地方找到答案。实际删除发生在 如果您不关心维护行顺序,则可以更改
for (Row row : rowsToDelete) {
sheet.removeRow(row);
}
到
请参阅ApachePOI文档,以更好地了解。
正如Adi所指出的,您仍然会将“更新”行移到底部,但在我的用例中,空行被成功删除
注意:我正在使用Apache Metamodel 4.5.4对这种行为进行改进吗?因为,就连我也在面对这个问题,在这里寻找线索。。。。!!!!这里有关于元模型性能的帮助吗?请阅读电子表格?
for (Row row : rowsToDelete) {
sheet.removeRow(row);
}
for (Row row : rowsToDelete) {
int rowNum = row.getRowNum() + 1;
sheet.removeRow(row);
sheet.shiftRows(rowNum, sheet.getLastRowNum(), -1);
}