Страница 12 из 13

Re: Работа с uOpenOffice

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

Re: Работа с uOpenOffice

СообщениеДобавлено: 27.01.2015 06:54:41
sign
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;

Re: Работа с uOpenOffice

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

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

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;

Re: Работа с uOpenOffice

СообщениеДобавлено: 27.03.2015 19:04:27
Лекс Айрин
Правильно ли я понял, что с помощью этого модуля нельзя импортировать/экспортировать текст в/из odt/doc файлов? Таблицы меня не интересуют.

Re: Работа с uOpenOffice

СообщениеДобавлено: 28.03.2015 07:12:08
sign
Я лично пользуюсь вот этим творением (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.

Re: Работа с uOpenOffice

СообщениеДобавлено: 28.03.2015 10:18:07
Лекс Айрин
Понятно. Будем пробовать.

Re: Работа с uOpenOffice

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

Был не прав. Ручная сборка zip-ом - все Ок. Zipper при сборке все же чудит.

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.

Re: Работа с uOpenOffice

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

Re: Работа с uOpenOffice

СообщениеДобавлено: 14.08.2015 11:37:57
sign
Я работаю с uOpenOffice написанный Yuric74`ом.
Всё работает - печать, сохранение, чтение, создание, русские пути.

Re: Работа с uOpenOffice

СообщениеДобавлено: 14.08.2015 15:47:07
java73
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 вызывает сразу ошибку.... почему, никто не объяснит?

Re: Работа с uOpenOffice

СообщениеДобавлено: 15.08.2015 08:48:05
sign
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;

Re: Работа с uOpenOffice

СообщениеДобавлено: 20.08.2015 11:10:03
java73
Друзья, у меня в пробнике, где осуществляется простое заполнение таблицы (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]


В чем может быть проблема?

Re: Работа с uOpenOffice

СообщениеДобавлено: 20.08.2015 11:21:21
Лекс Айрин
а FRoot.ChildNodes вообще существует? Хорошо бы выложить текст ошибки.