LINUX.ORG.RU

Как читать документацию по OpenOffice?

 , ,


0

2

Помогите, может я не туда смотрю?

http://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/Spreadsheets...

Написано — реализует XIndexAccess, в котором на getByIndex написано «Return type = any, the element at the specified index».

Где найти, какой тип на самом деле возвращается интерфейсом?

★★★★★

Последнее исправление: monk (всего исправлений: 1)

Что, даже на $subj тяму не хватило?

Как читать документацию по OpenOffice?

Точно так же как и любую другую. Составь план. Вот тебе, к примеру зачем?

ziemin ★★
()
Ответ на: комментарий от ziemin

Что, даже на $subj тяму не хватило?

Броузер по Enter'у решил вместо автодополнения Submit нажать

monk ★★★★★
() автор топика
Ответ на: комментарий от ziemin

Ну так чего ты ожидаешь от документации

Хочу понять из документации, что (какой тип) вернёт Doc.getSheets().getByIndex(0), если Doc имеет тип com.sun.star.sheet.XSpreadsheetDocument

Как-то даже по динамическим Common Lisp'у и Питону документация была гораздо внятней.

monk ★★★★★
() автор топика

Возьми да вызови на тестовом документе. Увидишь, что возвращает. Почитай исходники. Какой смысл читать сгенерированную документацию? Надо читать код или нормальные гайды.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Возьми да вызови на тестовом документе.

StarBasic даёт какой-то невразумительный ScTableSheetObj про который в документации ни слова.

getClass().getName() из StarBasic'а не работает. То есть единственный вариант — на каждый класс писать тестовую программу ан Java?

Очень сочувствую тем, кому приходится что-то разрабатывать на этом ужасном языке.

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

StarBasic даёт какой-то невразумительный ScTableSheetObj про который в документации ни слова.

Посмотри, какие интерфейсы реализует этот класс.

getClass().getName() из StarBasic'а не работает.

Что за StarBasic и почему не работает? Речь про Java или про Basic?

То есть единственный вариант — на каждый класс писать тестовую программу ан Java?

Ещё можно исходники почитать. А что ещё можно сделать, если никто не удосужился написать нормальную документацию?

Legioner ★★★★★
()

Вот нормальный пример, как работать с индексами

https://wiki.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Collections_an...

Что могли написать в документации к std::vector<T> например, что он вернет T. Вот и там написано: вернет T = any.

Уже не считая что в этом ихнем COM объект может реализовывать кучу интерфейсов, и тебе нужно самостоятельно проверять что там.

anonymous
()
Ответ на: комментарий от Legioner

Что за StarBasic и почему не работает

StarBasic — который внутри OpenOffice (макросы на нём пишутся). Просто там по понятным причинам почти вообще ничего. Думал для Java более понятно.

А что ещё можно сделать, если никто не удосужился написать нормальную документацию

А вообще в Java всегда в контейнерах от типа остаётся Any? Или это особенность документации на OpenOffice?

http://docs.libreoffice.org/sc/html/classScTableSheetObj.html

Тоже, похоже, огрызок.

uno::Reference< table::XCell > SAL_CALL ScTableSheetObj::getCellByPosition  ( sal_Int32  nColumn,  
  sal_Int32  nRow  
 )   
throw  ( ::com::sun::star::lang::IndexOutOfBoundsException, 
  ::com::sun::star::uno::RuntimeException, 
  std::exception 
 ) 

Вижу: возвращает table::XCell. В http://docs.libreoffice.org/sc/html/classes.html нету XCell, в http://docs.libreoffice.org/sc/html/namespaces.html даже нету table.

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

К слову, из доки видно, что для XIndexAccess в Spreadsheets

Description provides methods to access the spreadsheets by index. See also Spreadsheet

Возвращает оно сервис таблицы: http://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/Spreadsheet....

А дальше как по маслу. Внимательно читаем описание, и куда нам рекомендуют заглянуть. Работает даже без просмотра исходников

anonymous
()
Ответ на: комментарий от anonymous

Что могли написать в документации к std::vector<T> например, что он вернет T

Но в С++ в наследовании будет std::vector<ScTableSheetObj>, а не std::vector<void*>. А здесь интерфейс внезапно без типа элемента вообще.

Хотя в http://docs.libreoffice.org/sc/html/classScTableSheetsObj.html getByIndex тоже вместо ScTableSheetObj возвращает ::com::sun::star::uno::Any — похоже для С++ автогенерацией сделали.

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

оно им удобно для проброса этого самого UNO в биндинги. Вроде GObject* в GLib. Универсальный смарт указатель.

anonymous
()
Ответ на: комментарий от anonymous

Возвращает оно сервис таблицы

На нём почему-то unpublished. Ладно, иду дальше: интерфейс SheetCellRange -> CellRange -> XCellRange. Нашёл нужный мне метод getCellByPosition (http://www.openoffice.org/api/docs/common/ref/com/sun/star/table/XCellRange.html)

Смотрю возвращаемый тип: XCell. http://www.openoffice.org/api/docs/common/ref/com/sun/star/table/XCell.html — там всего 6 методов и больше ничего. Но я точно знаю, что как минимум есть свойство CellBackColor. Получается, что тип на самом деле не XCell, а Cell?

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

Это у OpenOffice'а особенность. Из их примеров:

com.sun.star.table.XCellRange xRange = xSheet.getCellRangeByName("F22");
 com.sun.star.sheet.XSheetCellRange xCellRange = (com.sun.star.sheet.XSheetCellRange)
     UnoRuntime.queryInterface(com.sun.star.sheet.XSheetCellRange.class, xRange);

И такого там через строку. То есть getCellRangeByName на самом деле возвращает XSheetCellRange, но в интерфейсе указан XCellRange. А если надо дополнительные поля, то нужно привести тип вручную. Нет слов, одни эмоции!

monk ★★★★★
() автор топика
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от monk

В чем суть?

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

Cell - это Implementation Details, т.е. вижу XCell, смотрю в доку, а там Cell. Почему так, это еще тот вопрос.

По хорошему, вот красивый пример работы с ячейками: https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Cell_and...

Т.е. этот самый XCell нужно просто привести к XPropertySet, и вероятно всё будет красиво

anonymous
()
Ответ на: комментарий от anonymous

Вроде GObject* в GLib

Но в Gtk ведь даже для контейнеров тип элемента пишут. https://developer.gnome.org/gtk3/unstable/GtkWidget.html#gtk-widget-list-acce... — element-type GClosure. А эти реально void* на все интерфейсы сделали и справились.

monk ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Т.е. этот самый XCell нужно просто привести к XPropertySet

Именно. Так как XCell не реализует XPropertySet. Его реализует Cell.

monk ★★★★★
() автор топика

Попробуй пройтись дебаггером - посмотри, что тебе возвращает этот метод.

Что такое 'any' - хз. Может, это они Object так обозвали, а, может, какой-то свой суперкласс (документация кривая, да. Но проще посмотреть в исходники).

В любом случае, сделай getByIndex(), а потом:

if (obj instanceof MyClass) {
    // cast to MyClass and
    // do something
}
Все лишние классы, которые не нужно обрабатывать - игнорь.

kovrik ★★★★★
()
Ответ на: комментарий от kovrik

В любом случае, сделай getByIndex(), а потом: if (obj instanceof MyClass)

Там своё instanceof с б. и ш.: (com.sun.star.sheet.XSheetCellRange) UnoRuntime.queryInterface(com.sun.star.sheet.XSheetCellRange.class, xRange)

monk ★★★★★
() автор топика
Ответ на: комментарий от kovrik

Все лишние классы, которые не нужно обрабатывать

Мне наоборот надо было узнать какой же там класс должен быть. В общем вроде разобрался.

monk ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.