![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись в таблицу OpenOffice [D6, WinXP]
O.O © (2010-09-22 10:48:00)Возникла необходимость создавать из программы таблицу OpenOffice. Воспользовался рекомендациями
http://rsdn.ru/article/openoffice/ooautomation.xml
...
public
{ Public declarations }
StarOffice: Variant;
OO_Document: Variant;
OO_Sheets: Variant;
OO_Sheet0: Variant;
OO_Sheet1: Variant;
end;
...
function TForm1.Connect: boolean;
begin
if VarIsEmpty(StarOffice) then
StarOffice := CreateOleObject('com.sun.star.ServiceManager');
Result := not (VarIsEmpty(StarOffice) or VarIsNull(StarOffice));
end;
function TForm1.CreateDocument: boolean;
var
StarDesktop: Variant;
begin
StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
OO_Document := StarDesktop.LoadComponentFromURL(
'private:factory/scalc', '_blank', 0,
VarArrayCreate([0, -1], varVariant));
Result := not (VarIsEmpty(OO_Document) or VarIsNull(OO_Document));
end;
создаю новую таблицу:
procedure TForm1.btnCreateClick(Sender: TObject);
begin
if Connect then begin
if CreateDocument then begin
OO_Sheets := OO_Document.OleFunction('getSheets');
вышестоящая строчка выдаёт ошибку "Metod 'OleFunction' not supported by automation object"
дальнейший код естественно не выполняется, при этом сама пустая таблица открывается.
OO_Sheet0 := OO_Sheets.OleFunction('getByIndex', 0);
OO_Sheet1 := OO_Sheets.OleFunction('getByIndex', 1);
end else begin
....
end;
end else begin
...
end;
Собственно вопрос:
в примере использовалась версия OpenOffice.org 1.1.2, я использую последнюю версию OpenOffice.org 3.2.1
В новой версии OO присутствует иной метод для доступа к ячейкам таблицы или я где-то ошибаюсь ?
O.O (2010-10-21 06:06:00) [1]Ответы на все вопросы по поводу работы с OpenOffice нашлись здесь:
http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=405083&pg=1&hl=variant+not+reference+automation+object
O.O (2010-09-22 13:11:00) [2]А здесь написано что вроде как должно быть:
http://api.openoffice.org/docs/common/ref/com/sun/star/table/XCellRange.html
O.O (2010-09-22 12:53:00) [3]и
GetCellRangeByNameтоже не работает :(
Бум искать
O.O (2010-09-22 12:24:00) [4]По ссылке ничего не нашёл. Попробовал методом "ТЫКА", получилось :)
Вместо
OO_Sheets := OO_Document.OleFunction('getSheets');
OO_Sheet0 := OO_Sheets.OleFunction('getByIndex', 0);
OO_Sheet1 := OO_Sheets.OleFunction('getByIndex', 1);
написал
OO_Sheets := OO_Document.GetSheets;
OO_Sheet0 := OO_Sheets.GetByIndex(0);
OO_Sheet1 := OO_Sheets.GetByIndex(1);
А с методом
Cell = Sheet.OleFunction('getCellByName','A1');
фокус с заменой на
Cell = Sheet.GetCellByName('A1');
не проходит, хотя конструкция
Cell = Sheet.GetCellByPosition(0, 0);
работает.
Плохиш (2010-09-22 10:57:00) [5]
> Возникла необходимость создавать из программы таблицу OpenOffice.
> Воспользовался рекомендациями
> http://rsdn.ru/article/openoffice/ooautomation.xml
>
>
там имеется ссылка на sdk, где можно найти и скачать sdk для нового опенофиса.