уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Проект находится на sourceforge.net. Все последние исправления в модуле именно там

Вот и подоспела ещё одна доработка модуля uOpenOffice.pas — модуля для работы с таблицами OpenOffice. Сегодняшнему обновлению модуля мы должны быть благодарны читателю Буркову Сергею aka Leo. Несмотря на то, что его сайт не имеет отношения к Delphi, я все-таки оставил ссылку, как благодарность читателю за то, что не забыл поделиться со всеми своими разработками. Ну, а теперь к делу.

Во-первых, следует сделать небольшое замечание по поводу работы модуля в целом.

Модуль при загрузке шаблона создаёт папку template, распаковывает в неё документ .odt, производит изменения, а после генерации документа стирает эту папку при закрытии OOWriter (но
не при закрытии документа), документ может быть сохранён
стандартными средствами OpenOffice, однако папка template со всеми временными файлами, в том числе и со сгенерированным документом УДАЛЯЕТСЯ после закрытия OO Writer. Если эта папка используется программой для каких-то других целей — её удаление может быть опасным -риск потери данных. Файл шаблона лежит в папке с exe-шником, возможно имеет смысл дать пользователю возможность указать произвольный путь.

Дело в том, что ни мне, ни Сергею подобные возможности модуля были не нужны. Да у меня и не было надежды на то, что модуль буде пользоваться спросом у Вас. Так что, если решите доработать эту часть модуля — все в ваших руках :).
Что касается доработанных частей модуля, то Сергей внес следующие коррективы:
1. Написал процедуру MultiplyRow для работы с таблицей (копирования нужной строки вместе с идентификаторами для замены)
2. Добавил процедуру FindAndReplace для класса TTable (для подстановок в строках)
3. Вынес GetTable в public для подключения таблицы по имени (имя таблицы можно узнать в её свойствах в ОО)
4. Добавил функцию LoadTemplate позволяющую более просто загружать шаблон
5. Добавил ShowDocument для быстрого отображения.
Также Leo поделился с нами небольшим примером использования модуля в своей программе. Вот он:

 // Создадим файл
  OoWriter:=TOoWriter.Create;
  // Подгрузим шаблон
  if not OoWriter.LoadTemplate('blank.odt' then exit;
  // Подпишемся
  OoWriter.Generator:='LeoSKL';
  OoWriter.Author:='Leo';
  // Вставим данные
  OoWriter.FindAndReplace('_Контакты',GetContacts);
  OoWriter.FindAndReplace('_Заголовок',GetCaption);
  OoWriter.FindAndReplace('_МОЛ',GetMOL);
  OoWriter.FindAndReplace('_АвторВремя',GetAuthorAndTime);
  GetSourceAndComment;
  OoWriter.FindAndReplace('_Основание',c1);
  OoWriter.FindAndReplace('_Комментарий',c2);
  // Заполним таблицу
  Table:=OoWriter.GetTable('Таблица1' ;
  Table.MultiplyRow(1,GetLinesCount-1);
  i:=1;
  while not IQ.EOF do begin
    with Table do begin
      FindAndReplace(i,'_№',IntToStr(i));
      FindAndReplace(i,'_Наим',IQ.FieldByName('name' .AsString);
      FindAndReplace(i,'_Колич',IQ.FieldByName('count' .AsString);
      FindAndReplace(i,'_ЕдИзм',IQ.FieldByName('meas' .AsString);
      FindAndReplace(i,'_Цена',IQ.FieldByName('price' .AsString);
      FindAndReplace(i,'_Сумма',IQ.FieldByName('sum' .AsString);
    end;
    inc(i);
    IQ.Next;
  end;
  Table.FindAndReplace(i,'_Итого',GetFromBase('select sum(sum) '+
    'from doc_strings where
docs_id='+DQ.FieldByName('docs_id' .AsString));
  // Вставим остальные данные
  GetSt;
  OoWriter.FindAndReplace('_Строка1Слева',s1l);
  OoWriter.FindAndReplace('_Строка1Справа',s1r);
  OoWriter.FindAndReplace('_Строка2',s2);
  OoWriter.ShowDocument;

Кстати, ещё одно очень важное замечание: Сергей дорабатывал модуль для работы в именно в Linux и на кроссплатформенности в целом не заострял внимания. Хотя я думаю, что модуль без проблем выполнит свою работу и в Lazarus под Windows.

Думаю, что можно было бы вынести разработку модуля в отдельный проект на том же Google Code, но боюсь, что третий проект я уже в полной мере контролировать не смогу :).
Буду благодарен, если Вы продолжите делиться со мной новыми версиями и доработками модуля.

А вот и сам модуль uOpenOffice.pas:
[download id=»48″ format=»1″]

0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
3 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Wolfenstain
Wolfenstain
15/10/2010 19:07

Немного не понимаю. В самом нечале модуля строчка:
Win32_Cmd =’C:/Windows/System32/cmd.exe’;
но ведь OS не всегда устанавливается в папку по умолчанию. А вот как использовать вместо ‘C:/Windows/’ переменную среды ‘%windir%’ не соображу.

SeregaAltmer
17/10/2010 07:14
uses
  SHFolder;
var
 path: array [0 .. MAX_PATH] of char;
 Win32_Cmd: string;
begin
 SUCCEEDED(SHGetFolderPath(0, CSIDL_SYSTEM, 0, 0, @path[0]));
 Win32_Cmd := path + 'cmd.exe';
end;
trackback

[…] =) И спустя некоторое время Бурков Сергей aka Leo дважды вносил изменения в модуль и улучшал его […]