编程语言
首页 > 编程语言> > java – 使用apache元模型更新excel文件

java – 使用apache元模型更新excel文件

作者:互联网

我正在尝试将Apache MetaModel合并到一个项目中并继续遇到一个奇怪的问题.我在代码中更新了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更新为“None”.

package MMTest;
import java.io.File;
import org.apache.metamodel.UpdateableDataContext;
import org.apache.metamodel.excel.ExcelDataContext;
import org.apache.metamodel.schema.Column;
import org.apache.metamodel.schema.Schema;
import org.apache.metamodel.schema.Table;
import org.apache.metamodel.update.Update;
public class MMTest {
    public static void main(String[] args) {
    UpdateableDataContext excel = new ExcelDataContext(new File("C:/test/test.xlsx"));
    Schema schema = excel.getDefaultSchema();
    Table[] tables = schema.getTables();
    assert tables.length == 1;
    Table table = schema.getTables()[0];
    Column Name = table.getColumnByName("Name");
    Column Zip = table.getColumnByName("Zip");
    excel.executeUpdate(new Update(table).where(Name).eq("Bob").value(Zip, "None"));
    }
}

很简单吧?不.
这是结果:

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

我错过了一些简单的事吗?文档非常稀疏,但我已经阅读了互联网在此软件包上提供的所有内容.我很感激你的时间.

解决方法:

晚了,但我最近碰到了这个问题,还没有在其他地方找到答案.实际删除发生在ExcelDeleteBuilder.java

如果您不关心维护行顺序,则可以更改

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

有关更好地理解shiftRows()的信息,请参阅Apache POI文档.
正如Adi指出的那样,你仍然会将“更新”行移到底部,但在我的用例中,成功删除了空行.

注:我正在使用Apache Metamodel 4.5.4

标签:apache,java,excel,metamodel,apache-metamodel
来源: https://codeday.me/bug/20190708/1403984.html