Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用apache元模型更新excel文件_Java_Excel_Apache_Metamodel_Apache Metamodel - Fatal编程技术网

Java 使用apache元模型更新excel文件

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.

我正试图将Apache元模型合并到一个项目中,并不断遇到一个奇怪的问题。我在代码中更新Excel电子表格行。代码找到正确的行,删除它,然后将该行(带有我的更新)附加到电子表格的底部。我希望更新发生在适当的位置,相同的数据保留在同一行中。我认为这是我做错了什么,然后建立了一个愚蠢的简单项目来复制这种行为。不幸的是,问题依然存在

以下是xlsx文件:

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);
    }