【问题标题】:Insert new row into LibreOffice writer table using UNO使用 UNO 将新行插入 LibreOffice 编写器表
【发布时间】:2016-02-14 21:28:05
【问题描述】:

我最近尝试编写一个小型 java 文件,该文件将在 .odt 文档中的现有表中插入一行。该表本身有 4 行和 3 列,但我想实现一个检查,如果要插入的内容大于 4,它将扩展该表。但是,每次我尝试获取表的行时,它都会返回一个 null指针。我对 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);
        }

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

【问题讨论】:

  • 我不熟悉 Java,所以不确定 - 但在您的代码中,变量 size 的价值在哪里?如果使用rows.getCount()方法获取当前行数有什么区别吗?
  • 大小变量在此代码的 sn-p 之前给出。它确定将插入的值的大小(即 5 个值或 100 个值)。由于变量 xCollumnAndRowRange 也为 null,因此 rows 值每次都将返回 null。这就是为什么我认为对象可能不正确或必须使用其他东西的原因
  • 如果你XTableRows rows = xTable.getRows()会发生什么?
  • 谢谢Lyrl。这确实有效。它现在返回正确的行数,没有空指针。

标签: java libreoffice uno


【解决方案1】:

正如 Lyrl 建议的那样,这是可行的:

XTableRows rows = xTable.getRows();

显然XColumnRowRange 仅用于电子表格。

注意:使用 Basic 或 Python 不会有这个问题,因为这些语言不需要 queryInterface。代码就是:

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

【讨论】:

  • 非常感谢!这确实是我的问题,XColumnRowRange 用于电子表格,当我使用编写器文档时,它会返回一个空指针。现在问题已经解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多