2015-11-13 5 views
0

Я недавно попытался закодировать небольшой файл java, который вставляет строку в уже существующую таблицу в документе .odt. Сама таблица имеет 4 строки и 3 столбца, но я хотел бы реализовать проверку, которая расширит эту таблицу, если содержимое, которое нужно вставить, больше 4. Однако каждый раз, когда я пытаюсь получить строки таблицы, он возвращает нулевой указатель. Я не знаком с UNI api, но, насколько я прочитал документацию, в этой ситуации следует использовать класс XColumnsAndRowRange. Мой код выглядит следующим образом:Вставить новую строку в таблицу писателя LibreOffice, используя UNO

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

Я не уверен, что мне что-то не хватает или я должен использовать другую функцию.

+0

Я не знаком с Java, так что не обязательно, но в вашем коде, где переменная 'size' получает свою ценность? Не имеет значения, если вы используете метод 'rows.getCount()' для получения текущего количества строк? – Lyrl

+0

Переменная размера указана до этого фрагмента кода. Он определяет размер значений, которые будут вставлены (т. Е. 5 значений или 100 значений). значение строк будет возвращать null каждый раз, поскольку переменная xCollumnAndRowRange также равна нулю. Вот почему я подумал, что, возможно, объект неправильный или что-то еще должно быть использовано –

+1

Что произойдет, если вы 'XTableRows rows = xTable.getRows()'? – Lyrl

ответ

1

Как предложил Lyrl, это работает:

XTableRows rows = xTable.getRows(); 

Видимо XColumnRowRange используется только для таблиц.

Примечание: с Basic или Python у вас не было бы этой проблемы, потому что этим языкам не нужен queryInterface. Код был бы просто:

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

Спасибо вам большое! Это была моя проблема в том, что XColumnRowRange используется для электронных таблиц, которые возвращают нулевой указатель, когда я работаю с документом писателя. Теперь проблема исправлена. –

Смежные вопросы