使用UNO将新行插入LibreOffice writer表

时间:2015-11-13 10:16:09

标签: java libreoffice uno

我最近尝试编写一个小的java文件,它会将一行插入到.odt文档中已存在的表中。表本身有4行3列,但我想实现一个检查,如果要插入的内容大于4,将扩展该表。但是,每次我尝试获取表的行时,它返回一个空指针。我对UNO api并不熟悉,但据我阅读文档,应该在这种情况下使用类XColumnsAndRowRange。我的代码如下:

XTextTablesSupplier xTablesSupplier = (XTextTablesSupplier) UnoRuntime.queryInterface(XTextTablesSupplier.class, xTextDocument);

    XNameAccess xNamedTables = xTablesSupplier.getTextTables();
    try {
        Object table = xNamedTables.getByName(tblName);
        XTextTable xTable = (XTextTable) UnoRuntime.queryInterface(XTextTable.class, table);
        XCellRange xCellRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, table);
        if(flag){
            XColumnRowRange xCollumnAndRowRange =(XColumnRowRange) 
                    UnoRuntime.queryInterface(XColumnRowRange.class, xCellRange);
                XTableRows rows = xCollumnAndRowRange.getRows();

                 System.out.println("Testing if this works");
                rows.insertByIndex(4, size-4);
        }

我不确定我在这里遗漏了什么,或者我是否应该使用不同的功能。

1 个答案:

答案 0 :(得分:1)

正如Lyrl所说,这有效:

XTableRows rows = xTable.getRows();

显然XColumnRowRange仅用于电子表格。

注意:使用Basic或Python时,您不会遇到此问题,因为这些语言不需要queryInterface。代码只是:

table = tables.getByName(tblName)
rows = table.getRows()