Макрос OpenOffice Basic против OpenOffice API

Я планирую писать макросы openoffice, используя базовый язык openoffice. Я изо всех сил пытаюсь найти объекты и методы, связанные с документами openoffice. Я погуглил и нашел несколько примеров кода и страницу API openoffice.org/api, но не смог определить, где находятся объекты и методы в API. Например, прочитайте эту строку кода

oSheet=oDoc.Sheets.getByName("Sheet1")

В имени «листы» нет метода/объекта, getByName, когда я ссылался на страницу API (openoffice.org/api). Где мне искать?


person Muthuvel    schedule 13.06.2020    source источник


Ответы (1)


Короткий ответ:

Листы можно получить по имени, индексу или перечислению через интерфейс com.sun.star.sheet.XSpreadsheetDocument.

oSheets = oDoc.getSheets().getByIndex(0)

Пояснение:

Тогда что такое oDoc.Sheets?

Чтобы действительно понять UNO API, лучше всего использовать Java. Вот некоторый код, который вам не нужно читать, но я покажу его здесь, потому что результаты будут полезны.

XSpreadsheetDocument xSpreadSheetDocument = UnoRuntime.queryInterface(
    XSpreadsheetDocument.class, xComponent);
XSpreadsheets xSpreadsheets = xSpreadSheetDocument.getSheets();
XPropertySet propSet = (XPropertySet)UnoRuntime.queryInterface(
    XPropertySet.class, xComponent);

Используя такой код, мы можем убедиться, что getSheets() работает в Java, а Sheets() — нет. В наборе свойств также нет свойства с именем Sheets. Короче говоря, в Java нет Sheets, поэтому Sheets не должно быть частью UNO API.

Теперь языки, менее строгие, чем Java, такие как Basic и Python, имеют различные сокращения для работы с UNO. Во-первых, им не нужно queryInterface для получения определенного объекта, потому что их не волнует тип.

Другой ярлык заключается в том, что они предоставляют свойства, которые можно использовать в качестве альтернативы методу определенного интерфейса. Итак, метод XSpreadsheetDocument.getSheets() получает свойство ярлыка Sheets. Точно так же метод XDocumentSupplier.getDocumentProperties() получает свойство ярлыка DocumentProperties. Оба эти свойства являются членами oDoc при написании на Basic или Python.

Поиск информации:

Поиск в документации по API непрост. Прежде чем пытаться это сделать, лучше поискать пример кода. Макродокумент Эндрю Питоньяка содержит набор примеров, которые охватывают многие потребности, а поиск в Google поможет привести пример кода с таких сайтов, как ask.libreoffice.org.

Кроме того, необходим инструмент самоанализа, такой как XrayTool или MRI. Такие инструменты выдают список всех свойств и методов, доступных для объекта, а поскольку список плоский, меньше необходимости копаться в интерфейсе унаследованного интерфейса другого интерфейса и так далее.

person Jim K    schedule 13.06.2020
comment
Спасибо. Специально для ознакомления с инструментами самоанализа. Я сейчас использую XRay. Я могу легко просматривать API. Спасибо. - person Muthuvel; 14.06.2020