Работа с uOpenOffice

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

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

Re: Работа с uOpenOffice

Сообщение leo_bsv » 24.10.2011 16:17:23

leo_bsv писал(а): frost_asm писал(а):Может ти бы выложил код на SourceForge или Google Code.


Эмм... модуль то не я писал... ) товарищч с webdelphi.ru... напишу ему письмецо =)

Владислав, разработчик модуля, не против чтобы мы выложили исходник и организовали поддержку.
Вообщем давайте выложим - вопрос - куда? SourceForge или Google Code?
Если у кого-то есть желание и опыт работы с такими ресурсами - милости просим.
Если не найдётся подходящей кондидатуры - это сделаю я :D только чур ногами не пинать - ни разу такими вещами не занимался.

Добавлено спустя 8 часов 9 минут 9 секунд:
Есть мысль дать модулю более независимое название - для последующей публикации на Google Code или SourceForge :) автор не против.
Что думаете по этому поводу? Варианты?
Куда бум выкладывать? Google Code или SourceForge? Что лучше?
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение frost_asm » 25.10.2011 23:15:23

leo_bsv выкладывай куда тебе удобнее)
а насчет названия у меня что то совсем нет идей.
frost_asm
новенький
 
Сообщения: 26
Зарегистрирован: 28.12.2008 22:40:36

Re: Работа с uOpenOffice

Сообщение leo_bsv » 26.10.2011 02:53:32

frost_asm писал(а):а насчет названия у меня что то совсем нет идей.

может быть назвать его ODF или ODFproc раз он с этими документами работает... :?:
вообще говоря этот формат реализован не только в OOo и Libre...
это ли не очередная реализация Open Document Format :?:
не знаю есть среди паскальных модулей модуль с названием odf.pas или нет... :?:
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Владимир » 27.10.2011 21:05:34

На вскидку накидал вот что :idea:
Код: Выделить всё
// удаление пустых строк из таблицы
procedure TTable.RemoveEmptyRow(Prefix: string);
var Node, SuicideNode: TDOMNode;
begin
  Node:=RootNode.FirstChild;
  while Assigned(Node) do begin
    //обработаем объединенные ячейки
    if Node.NodeName='table:covered-table-cell' then begin
      Node:=Node.NextSibling;
      continue;
    end;
    if (Node.FirstChild.NodeName='text:p') and
      (UTF8Pos(Prefix,Node.FirstChild.TextContent)>0) then begin
      SuicideNode:=Node;
      Node:=Node.NextSibling;
      SuicideNode.Destroy;
    end;
  end;
end;


Валится на if (Node.FirstChild.NodeName='text:p') and
(UTF8Pos(Prefix,Node.FirstChild.TextContent)>0) then begin

Если возможно, помогите! Сам не разберусь. Спасиб!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение Sergei I. Gorelkin » 27.10.2011 22:03:09

Уместно было бы проверять Node.FirstChild<>nil, перед тем как пытаться прочитать TextContent...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Работа с uOpenOffice

Сообщение v-t-l » 28.10.2011 09:43:30

Несколько идей по улучшению uOpenOffice

1. В функции TOoWriter.FindAndReplace необходимы изменения. По крайней мере с fpc 2.4.4, а может быть и раньше, TDOMNode.TextContent объявлен как DOMString, а DOMString = WideString. Поэтому происходит перекодировка в WideString из строки в кодировке UTF-8, как из AnsiString.
Что-то вроде :oops:
Код: Выделить всё
{$IFDEF FPC_VER 2.4.4} // ифдефы нужно переписать на проверку ВЕРСИИ fpc, сейчас не вспомню как :) !!!!
    txtcontent:=UTF8Encode(Node.TextContent);
{$ELSE}
    txtcontent:=Node.TextContent;
{$ENDIF}
    // делаем замену при розвращении по дереву
    if pos(Search,txtcontent)>0 then
        begin
{$IFDEF  FPC_VER 2.4.4}
           node.TextContent := UTF8Decode(ReplaceAllSubString(txtcontent,Search,Replace));
{$ELSE}
           node.TextContent := ReplaceAllSubString(txtcontent,Search,Replace);
{$ENDIF}

2. TTable желательно переименовать в TOoWriterTable или хотя бы TOoTable, чтобы не было путаницы с потомком TDataset.
3. При выполнении TOoWriter.LoadTemplate желательно запоминать весь набор файлов, входящих в шаблон, и при TOoWriter.GenerateDocument их добавлять в новый документ также. Иначе могут исчезнуть вставленные изображения, объекты и т.п.
v-t-l
энтузиаст
 
Сообщения: 728
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Работа с uOpenOffice

Сообщение leo_bsv » 28.10.2011 18:32:09

Sergei I. Gorelkin писал(а):Уместно было бы проверять Node.FirstChild<>nil, перед тем как пытаться прочитать TextContent...

+1 или Node.HasChildren
2 v-t-l угу :!: ценные рекомендации :!:
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Sergei I. Gorelkin » 28.10.2011 18:36:09

Модуль DOM использовал DOMString=WideString с момента создания, и это никогда не менялось.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Работа с uOpenOffice

Сообщение leo_bsv » 28.10.2011 22:11:49

v-t-l писал(а):1. В функции TOoWriter.FindAndReplace необходимы изменения. По крайней мере с fpc 2.4.4, а может быть и раньше, TDOMNode.TextContent объявлен как DOMString, а DOMString = WideString. Поэтому происходит перекодировка в WideString из строки в кодировке UTF-8, как из AnsiString.

Не ясен мотив такого наворота... при использовании русских идентификаторов и вообще русских символов в исходном тексте я обычно пишу UTF8ToSys('мой_текст') и всё работает,.. а что - что-то не работало? Я вообще говоря не замечал... где искать? :)
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение v-t-l » 29.10.2011 11:26:40

Писать каждый раз Utf8ToSys несколько не удобно, мне кажется :D
v-t-l
энтузиаст
 
Сообщения: 728
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Работа с uOpenOffice

Сообщение leo_bsv » 29.10.2011 21:43:38

v-t-l писал(а):Писать каждый раз Utf8ToSys несколько не удобно, мне кажется :D

мне тоже так кажется :wink: зато работает всё ))))
создавай аккаунт на SourceForge.net и скажи мне username созданного аккаунта - добавлю тебя в девелоперы.

Добавлено спустя 1 час 39 минут 23 секунды:
Файл модуля доступен из репозитория svn://svn.code.sf.net/p/odfproc/code/trunk,
терминальная команда lin:
Код: Выделить всё
svn checkout svn://svn.code.sf.net/p/odfproc/code/trunk odfproc-code

страница ODFProc.pas на SF: https://sourceforge.net/p/odfproc/
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение leo_bsv » 31.10.2011 00:42:50

v-t-l писал(а): При выполнении TOoWriter.LoadTemplate желательно запоминать весь набор файлов, входящих в шаблон, и при TOoWriter.GenerateDocument их добавлять в новый документ также. Иначе могут исчезнуть вставленные изображения, объекты и т.п.

Кстати использование внешних архиваторов решает проблему - просто архивируется всё содержимое папки. Как это сделать с помощью zipper пока не знаю.

Добавлено спустя 1 час 58 минут 6 секунд:
Проблема архивации успешно решена с помощью zipper'a )
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение volodya25 » 06.11.2011 14:25:07

Скачал файл модуля из репозитория, создал пустой проект, бросил кнопку на форму
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var oowriter: todt;
begin
   OoWriter:=TOdt.Create; 


Получаю ошибку Project project1 raised exception class `EDOError` with message: EDOMError in DOMDocument.CreateAttribute
Код: Выделить всё
procedure TOdt.GenerateStyles;
var Root, Node: TDOMNode;
begin
FreeAndNil(FStyles);
FStyles:=TXMLDocument.Create;
Root:=FStyles.CreateElement('office:document-styles');
  InsertXMLNS(TDOMElement(Root));  // Здесь появляется сообщение об ошибке


Возможно ошибка из-за того что в файле odfproc.pas изменил строку
Код: Выделить всё
uses main,Zipper;

на
Код: Выделить всё
uses Zipper;

Модуль main у меня отсутствует.
Поскажите пожалуйста что я делаю не так.
Ubuntu 11.10/Lazarus 0.9.30/FPC 2.4.4
volodya25
новенький
 
Сообщения: 10
Зарегистрирован: 03.11.2011 22:33:23
Откуда: Украина

Re: Работа с uOpenOffice

Сообщение leo_bsv » 06.11.2011 21:22:50

Косяк появился после внесения изменений, исправляю... main никак не влияет.

Добавлено спустя 12 минут 19 секунд:
Ошибка устранена.
Модуль не тестировался, об ошибках можете сообщать сюда или на страницу на SourceForge
Теоритически сейчас всё доложно работать :)
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение volodya25 » 09.11.2011 11:29:39

Заработало.
TZipper на выходе формирует .zip а не .odt, из-за чего Writer потом не находит сформированный файл. Вылечил.
Если используется Libre Office то запуск редактора не через ooffice а через soffice.
Куда слать патч?
volodya25
новенький
 
Сообщения: 10
Зарегистрирован: 03.11.2011 22:33:23
Откуда: Украина

Пред.След.

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

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

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

Рейтинг@Mail.ru