Работа с uOpenOffice

Библиотеки для работы с офисными пакетами (OpenOffice, MS Office и т.п.)

Модератор: Модераторы

Re: Работа с uOpenOffice

Сообщение leo_bsv » 09.11.2011 22:04:38

можете сюда, можете сюда
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение volodya25 » 09.11.2011 22:57:08

Создаваемый файл теперь всегда имеет название doc.odt и открывается программой по умолчанию.
Патч:
Код: Выделить всё
*** odfproc.pas   2011-11-09 21:39:08.522435327 +0300
--- odfproc.pas.1   2011-11-09 21:33:21.000000000 +0300
***************
*** 482,492 ****
    exe_path:=ExtractFilePath(Application.ExeName);
 
    {$IFDEF Linux}
!   templ_path:=exe_path+'template/';
!   GenerateDocument(templ_path,'doc','');
    try
      Proc:=TProcess.Create(nil);
!     Proc.CommandLine:='ooffice -writer '+templ_path+'doc.odt';
      Proc.Options:=[poWaitOnExit];
      Proc.ShowWindow:=swoShowMaximized;
      Proc.Execute;
--- 482,492 ----
    exe_path:=ExtractFilePath(Application.ExeName);
 
    {$IFDEF Linux}
!   templ_path:=exe_path+'temp/';
!   GenerateDocument(templ_path,'doc.odt','');
    try
      Proc:=TProcess.Create(nil);
!     Proc.CommandLine:='xdg-open '+templ_path+'doc.odt';
      Proc.Options:=[poWaitOnExit];
      Proc.ShowWindow:=swoShowMaximized;
      Proc.Execute;

volodya25
новенький
 
Сообщения: 10
Зарегистрирован: 03.11.2011 22:33:23
Откуда: Украина

Re: Работа с uOpenOffice

Сообщение leo_bsv » 10.11.2011 00:15:34

volodya25, спасибо за участие, изменения внесены.
новая ревизия файла доступна тут
если есть желание могу добавить вас как разработчика проекта на SF - сможете сами вносить изменения.
для добавления нужен ваш логин на SF.
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение v-t-l » 19.11.2011 15:47:00

Кстати, для открытия сгенерированного документа программой по умолчанию можно использовать кроссплатформенную (win,unix,mac) функцию OpenDocument из модуля LCLIntf!
v-t-l
энтузиаст
 
Сообщения: 710
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Работа с uOpenOffice

Сообщение leo_bsv » 19.11.2011 22:42:41

v-t-l писал(а):Кстати, для открытия сгенерированного документа программой по умолчанию можно использовать кроссплатформенную (win,unix,mac) функцию OpenDocument из модуля LCLIntf!

Спасибо, добавлено как задание по оптимизации на SF! Рассмотрим!
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Владимир » 08.12.2011 14:39:37

leo_bsv писал(а):
v-t-l писал(а):Кстати, для открытия сгенерированного документа программой по умолчанию можно использовать кроссплатформенную (win,unix,mac) функцию OpenDocument из модуля LCLIntf!

Спасибо, добавлено как задание по оптимизации на SF! Рассмотрим!

Всем доброго! Во-первых, еще раз большое спасибо всем за модуль - пользую, не нарадуюсь.
Под себя доработал процедуру ShowDocument для именования выходного файла и указания path для запуска writer (или swriter) - так, на мой взгляд, дешевле, чем использовать программу по умолчанию.
Собственно доработка
Код: Выделить всё
procedure TOdt.ShowDocument(n_path,name_doc:String);//жесткий путь запуска и имя док-та
var exe_path, templ_path, sh: string; //если n_path='' или name_doc='' то запуск или имя по умолчанию
    f_name: string = 'doc.odt';
    Proc: TProcess;
begin
  exe_path:=ExtractFilePath(Application.ExeName);
  {$IFDEF Linux}
  templ_path:=IncludeTrailingPathDelimiter(exe_path+'temp');
  if Trim(name_doc)<>'' then f_name:=name_doc+'.odt';
  GenerateDocument(templ_path,f_name,'');
  try
    Proc:=TProcess.Create(nil);
    if Trim(n_path)<>'' then
    Proc.CommandLine:=Trim(n_path)+' '+templ_path+f_name
    else
    Proc.CommandLine:='xdg-open '+templ_path+f_name;
    Proc.Options:=[poWaitOnExit];
    Proc.ShowWindow:=swoShowMaximized;
    Proc.Execute;
  finally
      sleep(2000);//пару сек ждем - иногда приложение по умолчанию не успевает запуститься
     if Proc.WaitOnExit then begin
      Proc.CommandLine:='rm '+templ_path+' -r';
      Proc.Execute;
      Proc.Free;
    end;
  end;
  {$ENDIF}
end;
Последний раз редактировалось Владимир 13.12.2011 15:05:45, всего редактировалось 2 раз(а).
Владимир
постоялец
 
Сообщения: 316
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 10.12.2011 00:20:11

Просто кто-то использует AbiWord, кто-то KWord... мб на самом деле проще сделать чтобы открывалось редактором по-умолчанию?
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Владимир » 11.12.2011 10:37:35

leo_bsv писал(а):volodya25, спасибо за участие, изменения внесены.

Доброго! У меня не работает вызов Table.AppendRow('Standard'); - ругань на Integer
Код: Выделить всё
procedure TOdtTable.AppendRow(TextStyle: string);
var Root, Node: TDOMNode;
    i:integer;
begin
  Node:=FDocument.CreateElement('table:table-row');
  Root:=RootNode.AppendChild(Node);//Root = table:table-row
   for i:=1 to Cols do
    begin
       Node:=FDocument.CreateElement('table:table-cell');
        TDOMElement(Node).SetAttribute('table:style-name',DefoultCellStyle);
        TDOMElement(Node).SetAttribute('office:value-type','string');
      Root:=Root.AppendChild(Node);//root = table:table-cell
      Node:=FDocument.CreateElement('text:p');
        if length(TextStyle)>0 then
          TDOMElement(Node).SetAttribute('text:style-name',TextStyle)
        else
          TDOMElement(Node).SetAttribute('text:style-name',DefTextStyle);
      Root.AppendChild(Node);
      Root:=Root.ParentNode;//Root = table:table-row
    end;
end;

Похоже, Cols не определена. Также не работает Table.AppendColumn('Standard');
Или я чего не понимаю?
Далее (пробую роль тестера)
Table.RemoveRow; - работает
Table.MultiplyRow(1,1);- работает
Table.Cell[0,2]:='bla-bla';- работает
Чтение Table.Rows;- работает
Чтение Table.Cols;- не работает
Table.RemoveEmptyRow('bla-bla');- не работает (вешает все)
Пока все.
ps. В целом все неплохо, работать можно.
Владимир
постоялец
 
Сообщения: 316
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение Владимир » 13.12.2011 12:13:03

Приложил код доработанной процедуры ShowDocument к своему сообщению от 08.12
Владимир
постоялец
 
Сообщения: 316
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 14.12.2011 02:23:44

Владимир писал(а):Table.RemoveEmptyRow('bla-bla');- не работает (вешает все)

Да, процедура не доделана, у меня пока не хватает времени... ваши замечания зафиксированы здесь
Спасибо за активнось. Как появится возможность - изменения будут внесены.
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение leo_bsv » 18.12.2011 01:38:28

Владимир писал(а):Приложил код доработанной процедуры ShowDocument к своему сообщению от 08.12

ShowDocument сделана перегружаемой, теперь может запускаться как с параметрами, так и без, если не сложно - проведите тестирование.
Файл можно скачать по этой ссылке
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Владимир » 19.12.2011 09:31:53

ShowDocument сделана перегружаемой, теперь может запускаться как с параметрами, так и без, если не сложно - проведите тестирование.

Не сложно. Запуск без параметров ('','') валит все. Если указывать пробелы, то:
Код: Выделить всё
ODT:=TOdt.Create;
  ODT.LoadTemplate('/arch/shop/template/cennik.odt');
  ODT.ShowDocument(' ',' ');//ошибка чтения /temp
// ODT.ShowDocument(' ','ddd.odt');//нет запуска по умолчанию
//ODT.ShowDocument('/opt/openoffice.org3/program/swriter','ddd.odt');//работает
//ODT.ShowDocument('/opt/openoffice.org3/program/swriter',' ');//открывает док и валится
  Odt.Destroy;

Не очень понятно - а зачем перегрузка функции? С точки зрения вызова с параметрами/без и "правильности" - ну, может быть... Зачем усложнять то, что работает и - с непредсказуемым результатом?
Владимир
постоялец
 
Сообщения: 316
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 20.12.2011 00:57:47

как-бы для обратной совместимости... у меня например эта функция использовалась без параметров, и изменять лишний раз работающий код не охота :D
а если в Ваших примерах в параметрах поставить вместо пробелов пустые строки? Т.е. все проверки корректности параметров производить не внутри процедуры а перед её вызовом?
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Владимир » 20.12.2011 08:59:44

Понятно. Однако не с того начали - вызов процедуры без параметров даже не компилится - требует параметры.
Что-то не так с overload или я чего не понимаю. Идея доработки в том, чтобы вызывать процедуру как с, так и без параметров?.
Замена пробелов на пустые строки:
Код: Выделить всё
  str_0,str_1:String;
begin
str_0:='     ';  str_1:='     ';
  ODT:=TOdt.Create;
  ODT.LoadTemplate('/arch/shop/template/cennik.odt');
  //ODT.ShowDocument; //ERROR
  // ODT.ShowDocument(str_0,str_1);//ничего не происходит
  //ODT.ShowDocument(str_0,'ddd.odt');/ничего не происходит
//ODT.ShowDocument('/opt/openoffice.org3/program/swriter','ddd.odt');//работает
//ODT.ShowDocument('/opt/openoffice.org3/program/swriter',str_0);//открывает док и валится
  Odt.Destroy;
Владимир
постоялец
 
Сообщения: 316
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 21.12.2011 00:08:26

Ошибка, связанная с перезагрузкой функции устранена - в данном случае не нужна была перезагрузка, достаточно просто параметров по-умолчанию.
Скорректированный модуль здесь
Пишите ваши наблюдения и мысли. Бум допиливать. :!:
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Пред.След.

Вернуться в Office Lib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru