Работа с uOpenOffice

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

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

Re: Работа с uOpenOffice

Сообщение Black Cat » 26.01.2015 15:12:33

Вопрос: а работа над модулем продолжается?
Просто при работе с ним обнаружил ошибки... Поправил часть...:
Методы не наследуются. Т.е. у TODF они не помечены как virtual, а у TODT и TODS как override.
Конструктор и деструктор TODF почему-то в приватной области. Это было сделано специально?
Добавил метод Free. (хотя если пАпрАвильнАму сделать, то надо было бы его просто унаследовать...) :)
Изменил:
Проблему зиппера под Виндой решил изменением кода на запуск 7zip и приложил к проекту файл. (шоб не думать)
Добавил к конструктору параметр tempdir (чтоб можно было менять при необходимости, когда разбирался с зиппером).
ЗЫ: к сожалению менял все очень быстро, поэтому не поставил комментариев - и не уверен, что все указал. :(
Black Cat
незнакомец
 
Сообщения: 1
Зарегистрирован: 26.01.2015 14:56:35

Re: Работа с uOpenOffice

Сообщение sign » 27.01.2015 06:54:41

Algoritmer писал(а):Подскажите пожалуйста, как получить данные из конкретной ячейки листа (TOdsSheet) ?

Значит так. Если речь об этом
Код: Выделить всё
//******************************************************************************
//*                    Written by Yuri (aka Yuric74)                           *
//*           http://www.sql.ru/forum/actualthread.aspx?tid=405083             *
//*                 all version at http://yuri.elmeh.ru                        *
//******************************************************************************
unit uOpenOffice;

то делаем обратно написанному:
Код: Выделить всё
var  FBuyDoc: TOOCalc;
     Sh: TOOCalcSheet;
...
  Sh.Cell[0, i].AsText := S;
...

Т.е.
Код: Выделить всё
S := Sh.Cell[0, i].AsText


Добавлено спустя 8 минут 18 секунд:
Забыл.
Соответственно
Код: Выделить всё
var
    FBuyDoc: TOOCalc;
    Sh: TOOCalcSheet;
    S: String;
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Работа с uOpenOffice

Сообщение leo_bsv » 15.02.2015 11:20:14

Black Cat писал(а):Вопрос: а работа над модулем продолжается?
Просто при работе с ним обнаружил ошибки... Поправил часть...:
Методы не наследуются. Т.е. у TODF они не помечены как virtual, а у TODT и TODS как override.
Конструктор и деструктор TODF почему-то в приватной области. Это было сделано специально?
Добавил метод Free. (хотя если пАпрАвильнАму сделать, то надо было бы его просто унаследовать...) :)
Изменил:
Проблему зиппера под Виндой решил изменением кода на запуск 7zip и приложил к проекту файл. (шоб не думать)
Добавил к конструктору параметр tempdir (чтоб можно было менять при необходимости, когда разбирался с зиппером).
ЗЫ: к сожалению менял все очень быстро, поэтому не поставил комментариев - и не уверен, что все указал. :(

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

Re: Работа с uOpenOffice

Сообщение Владимир » 26.03.2015 21:43:02

leo_bsv писал(а):
Black Cat писал(а):Вопрос: а работа над модулем продолжается?
Просто при работе с ним обнаружил ошибки... Поправил часть...:
Методы не наследуются. Т.е. у TODF они не помечены как virtual, а у TODT и TODS как override.
Конструктор и деструктор TODF почему-то в приватной области. Это было сделано специально?
Добавил метод Free. (хотя если пАпрАвильнАму сделать, то надо было бы его просто унаследовать...) :)
Изменил:
Проблему зиппера под Виндой решил изменением кода на запуск 7zip и приложил к проекту файл. (шоб не думать)
Добавил к конструктору параметр tempdir (чтоб можно было менять при необходимости, когда разбирался с зиппером).
ЗЫ: к сожалению менял все очень быстро, поэтому не поставил комментариев - и не уверен, что все указал. :(

Скиньте вашу версию модуля - посмотрим.

Уважаемый Leo! Огромное спасибо за модуль! Под лином работает безупречно. Под Win8 попробовал - бред какой-то - в процедуре Zipper.ZipAllFiles Zipper пакует в файл не созданную в модуле директорию, а все, начиная с Users...Temp_AppData_Users и т.д.
Да, версия от 2012 года. Может, что-нить под Win поправили?

Добавлено спустя 3 минуты 54 секунды:
Black Cat писал(а):Проблему зиппера под Виндой решил изменением кода на запуск 7zip и приложил к проекту файл. (шоб не думать

Доброго! Ачто за проблема Zipper? У меня под Win вроде не корректно работает - валит в .odt все директории от папки запуска проги. У Вас также?

Добавлено спустя 12 часов 34 минуты 22 секунды:
Всем доброго! Скачал OdfProc(33), пробую под Win8.1 - получаю сообщ "файл поврежден", после восстановления - все Ок. При ручной сборке zip-ом - та же картина, т.е. Zipper работает нормально. И чего делать?

Код: Выделить всё

ODT := TOdt.Create;
//шаблон
if not ODT.LoadFromFile('C:\template.odt') then exit;
// подпись
ODT.Generator:='LibreOffice';
ODT.Author:='volod';
// Вставим данные
ODT.FindAndReplace('firm','123321');
odt.ShowDocument('mydoc.odt','C:\Program Files\....LibreOffice 4\Program\Swriter');
ODT.Destroy;
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение Лекс Айрин » 27.03.2015 19:04:27

Правильно ли я понял, что с помощью этого модуля нельзя импортировать/экспортировать текст в/из odt/doc файлов? Таблицы меня не интересуют.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Работа с uOpenOffice

Сообщение sign » 28.03.2015 07:12:08

Я лично пользуюсь вот этим творением (Win XP):
Код: Выделить всё
//******************************************************************************
//*                    Written by Yuri (aka Yuric74)                           *
//*           http://www.sql.ru/forum/actualthread.aspx?tid=405083             *
//*                 all version at http://yuri.elmeh.ru                        *
//******************************************************************************
unit uOpenOffice;

interface

//{$DEFINE WITH_EVENTS}

uses Graphics, Windows, Variants, Classes, ComObj
{$IFDEF WITH_EVENTS}
,ActiveX,uOpenOffice_TLB
{$ENDIF}
;
 


Работа и с doc, и с odt, и с xls, и с ods.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Работа с uOpenOffice

Сообщение Лекс Айрин » 28.03.2015 10:18:07

Понятно. Будем пробовать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Работа с uOpenOffice

Сообщение Владимир » 29.03.2015 20:47:50

Владимир писал(а):Всем доброго! Скачал OdfProc(33), пробую под Win8.1 - получаю сообщ "файл поврежден", после восстановления - все Ок. При ручной сборке zip-ом - та же картина, т.е. Zipper работает нормально. И чего делать?

Был не прав. Ручная сборка zip-ом - все Ок. Zipper при сборке все же чудит.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение Владимир » 30.03.2015 21:13:41

Black Cat писал(а):Проблему зиппера под Виндой решил изменением кода на запуск 7zip и приложил к проекту файл.

Всем доброго! Поставил 7-zip. Задача - сделать zip-архив aaaa.zip файлов и директорий в директории C:mysoftproga. Пишу в cmd
Код: Выделить всё
    C:Program Files7-zip7z.exe a -tZip "C:aaaa.zip" -r "C:mysoftproga*.*"


Все Ок, в архиве именно файлы и каталоги из C:mysoftproga.
Делаю то же из софта через TProcess:

Код: Выделить всё
    .....
    AProcess.CommandLine:='C:Program Files7-zip7z.exe a -tZip "C:aaaa.odt" -r "C:mysoftproga*.*"';
    AProcess.Optoins:=AProcess.Options+[poWaitOnExit];
    AProcess.Execute;
    .....


Получаю архив, включающий не нужную мне директорию proga !
p.s. ShellExecute дает тот же результат.
Чего присоветуете?

Добавлено спустя 12 часов 46 минут 26 секунд:
Владимир писал(а):
Black Cat писал(а):Проблему зиппера под Виндой решил изменением кода на запуск 7zip и приложил к проекту файл.

Всем доброго! Поставил 7-zip. Задача - сделать zip-архив aaaa.zip файлов и директорий в директории C:\mysoft\proga\. Пишу в cmd
Код: Выделить всё
    C:\Program Files\7-zip\7z.exe a -tZip "C:\aaaa.zip" -r "C:\mysoft\proga\*.*"


Все Ок, в архиве именно файлы и каталоги из C:\mysoft\proga\.
Делаю то же из софта через TProcess:

Код: Выделить всё
    .....
    AProcess.CommandLine:='C:\Program Files\7-zip\7z.exe a -tZip "C:\aaaa.odt" -r "C:\mysoft\proga\*.*"';
    AProcess.Optoins:=AProcess.Options+[poWaitOnExit];
    AProcess.Execute;
    .....


Получаю архив, включающий не нужную мне директорию \proga !
p.s. ShellExecute дает тот же результат.
Чего присоветуете?

Сам себе ответил: 7-Zip корректно работает, если расширение ахива соответствует ключу -t. Чудеса начинаются при попытке установить расширение архива, отличное от .zip.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение java73 » 13.08.2015 11:35:28

Друзья, подскажите, пожалуйста, ведется ли дальнейшая доработка модуля?
Сейчас появилась острая необходимость использования возможностей офиса для вывода документов. Использую доработанный по комментариям из этого форума ODFProc 33 ревизии, LibreOffice последний (4.4.5.2), Windows XP 32.
Модуль работает с документом нормально, но открытие и сохранение документа неправильное - LIbreOffice сообщает, что документ поврежден. Восстановление помогает, но хотелось бы обойти для удобства конечного пользователя.
Не поделится ли кто рабочим кодом модуля с обходом данной проблемы? Если есть код, альтернативно использующий внешний архиватор, мне сгодится.
Заранее спасибо.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Работа с uOpenOffice

Сообщение sign » 14.08.2015 11:37:57

Я работаю с uOpenOffice написанный Yuric74`ом.
Всё работает - печать, сохранение, чтение, создание, русские пути.
Вложения
OOff.zip
(45.71 КБ) Скачиваний: 1146
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Работа с uOpenOffice

Сообщение java73 » 14.08.2015 15:47:07

sign писал(а):Я работаю с uOpenOffice написанный Yuric74`ом.
Всё работает - печать, сохранение, чтение, создание, русские пути.

А у меня нет. Русские пути не открываются. ReplaceAll не работает. Говорит, OleError

Добавлено спустя 36 минут 13 секунд:
По ODFProc:
поменял в GenerateDocument код на:
Код: Выделить всё
if DocumentPath = 'default' then
      PathName := ExtractFilePath(Application.ExeName)
    else
      PathName := IncludeTrailingPathDelimiter(DocumentPath);
  ComStr:='7z.exe a -tzip "'+PathName+'doc.zip" "'+TempDir+'*"';
  P:=TProcess.Create(nil);
  P.CommandLine:=ComStr;
  P.Options:=P.Options+[poWaitOnExit];
  P.Execute;
  RenameFile(PathName+'doc.zip',PathName+DocumentName);


При этом ShowDocument открывает нормально, а SaveToFile сохраняет, но готовый файл опять открывается "поврежденный". Как такое может быть, если оба метода вызывают один и тот же GenerateDocument ???????

Добавлено спустя 1 час 23 минуты 48 секунд:
Код: Выделить всё
  Doc.FindAndReplace('%FIRSTPARAM%',Utf8ToAnsi('-ПЕРВЫЙ-'));
  Doc.FindAndReplace('%SECONDPARAM%',Utf8ToAnsi('-Второй-'));
  Doc.FindAndReplace('%DATA%',DateToStr(Now));
  Table:=Doc.GetTable('Таблица1');
  Table.Cells[0,0]:='№ п/п';
  Table.Cells[1,0]:='название';
  Table.Cells[2,0]:='Текст';
  for I:=1 to 10 do begin
    Table.MultiplyRow(I,1);
    Table.Cells[0,I]:=IntToStr(I);
    table.Cells[1,I]:='Таблица1';
    Table.Cells[2,I]:='текст №'+IntToStr(I)+' '+TimeToStr(Now);
  end;
  Doc.ShowDocument('template.odt');


FindAndReplace работает.
Обращение к Table.Cells вызывает сразу ошибку.... почему, никто не объяснит?
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Работа с uOpenOffice

Сообщение sign » 15.08.2015 08:48:05

java73 писал(а):
sign писал(а):Я работаю с uOpenOffice написанный Yuric74`ом.
Всё работает - печать, сохранение, чтение, создание, русские пути.

А у меня нет. Русские пути не открываются.


Посмотрите, у вас там точно вот так:

FilePath := ConvertToURL(UTF8ToSys(FileName))

в процедуре:

Код: Выделить всё
procedure TOpenOffice.OpenDocument(FileName:string;OpenMode:TOpenOM;Macro:TOpenMM);
var
  FilePath: variant;
  Ar,SM:variant;
begin
  if (FileName<>'') then
    if ConnectTo(FileName) then
      Exit;
  SM:=CreateOleObject('com.sun.star.ServiceManager');
  if (FileName='') then
    FilePath:=FNewName
  else
    FilePath := ConvertToURL(UTF8ToSys(FileName));
  Ar:=VarArrayCreate([0,3],varVariant);
  Ar[0]:=MakePV(SM,'Hidden',oomHidden in OpenMode);
  Ar[1]:=MakePV(SM,'AsTemplate',oomAsTemplate in OpenMode);
  Ar[2]:=MakePV(SM,'ReadOnly',oomReadOnly in OpenMode);
  Ar[3]:=MakePV(SM,'MacroExecutionMode',Macro);
  FDocument:=FDesktop.LoadComponentFromURL(FilePath,'_blank',0,Ar);
  {$IFDEF WITH_EVENTS}
  FDocument.AddEventListener(FDocEvent as Listener);
  {$ENDIF}
  Ar:=Unassigned;
  SM:=Unassigned;
end;
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Работа с uOpenOffice

Сообщение java73 » 20.08.2015 11:10:03

Друзья, у меня в пробнике, где осуществляется простое заполнение таблицы (Table:=Doc.GetTable('Таблица1'); Table.Cells[0,0]:='№ п/п'; Table.Cells[1,0]:='название'; Table.Cells[2,0]:='Текст';) рушится все с ошибкой. На этом вот участке кода модуля:
Код: Выделить всё
function TOdtTable.GetCellNode(ACol, ARow: Integer): TDOMNode;
var i,j:integer;
    List: TDOMNodeList;
    Node: TDOMNode;
begin
  [u]List:=FRoot.ChildNodes; [/u]


В чем может быть проблема?
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Работа с uOpenOffice

Сообщение Лекс Айрин » 20.08.2015 11:21:21

а FRoot.ChildNodes вообще существует? Хорошо бы выложить текст ошибки.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.След.

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

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

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

Рейтинг@Mail.ru