Форум: "Основная";
Текущий архив: 2012.03.04;
Скачать: [xml.tar.bz2];
ВнизЗапись в таблицу OpenOffice Найти похожие ветки
← →
O.O (2010-09-22 10:48) [0]Возникла необходимость создавать из программы таблицу 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 присутствует иной метод для доступа к ячейкам таблицы или я где-то ошибаюсь ?
← →
Плохиш © (2010-09-22 10:57) [1]
> Возникла необходимость создавать из программы таблицу OpenOffice.
> Воспользовался рекомендациями
> http://rsdn.ru/article/openoffice/ooautomation.xml
>
>
там имеется ссылка на sdk, где можно найти и скачать sdk для нового опенофиса.
← →
O.O (2010-09-22 12:24) [2]По ссылке ничего не нашёл. Попробовал методом "ТЫКА", получилось :)
Вместо
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);
работает.
← →
O.O (2010-09-22 12:53) [3]и
GetCellRangeByName
тоже не работает :(
Бум искать
← →
O.O (2010-09-22 13:11) [4]А здесь написано что вроде как должно быть:
http://api.openoffice.org/docs/common/ref/com/sun/star/table/XCellRange.html
← →
O.O (2010-10-21 06:06) [5]Ответы на все вопросы по поводу работы с OpenOffice нашлись здесь:
http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=405083&pg=1&hl=variant+not+reference+automation+object
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2012.03.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c