Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запись в таблицу 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 для нового опенофиса.


Наверх

Титульная страница Поиск, карта сайта Написать письмо