Работа с uOpenOffice

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

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

Re: Работа с uOpenOffice

Сообщение Ustas » 09.07.2012 15:13:00

Доброе время суток.
Vista, Lasarus 0.9.30, FPC 2.4.2, LibreOffice 3.5.4.

Пытаюсь разобраться uOpenOffice, но что то не очень.
1. Вставляю строку:
Код: Выделить всё
AppendText('heading 1', Utf8ToAnsi('Заголовок 1'));
, но стиль все равно базовый;
2. Собирается файл odt, но LO говорит что он поврежден, предлагает восстановить - восстанавливает. Собрал ODT через FAR встроенным архиватором форматом Zip - все получилось, LO открывает без проблем. Значит косячит Zipper в Lasarus.
Может что не так делаю?

p.s. изменил код в процедуре AddEntries из процедуры GenerateDocument на:
Код: Выделить всё
...
          if dir<>TempDir then begin
            short_dir:=dir;
            UTF8Delete(short_dir,0,UTF8Length(TempDir));
            Zipper.Entries.AddFileEntry(IncludeTrailingPathDelimiter(dir)+
              F.Name,IncludeTrailingPathDelimiter(short_dir)+F.Name);
          end
          else
            begin
              Zipper.Entries.AddFileEntry(IncludeTrailingPathDelimiter(dir)+F.Name,F.Name);
            end;
...

иначе все файлы из корня попадают в подкаталог "без имени".
Ustas
постоялец
 
Сообщения: 145
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: Работа с uOpenOffice

Сообщение leo_bsv » 14.08.2012 00:11:15

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

Re: Работа с uOpenOffice

Сообщение elshir » 19.02.2013 19:49:46

Ребят, поделитесь простым примером создания отчета с помощью odfproc.pas но только в windows?
elshir
незнакомец
 
Сообщения: 9
Зарегистрирован: 09.12.2012 21:08:14

Re: Работа с uOpenOffice

Сообщение leo_bsv » 11.07.2013 00:46:58

ODFProc.pas обновилась (zip либо source_code) :

Коротко:
в этом коммите существенные изменения в структуре классов, плюс изменён порядок параметров в ShowDocument и GenerateDocument, модуль временно настроен только на LibreOffice, как обычно тестировался под Linux и не тестировался под Windows! Добавлена начальная поддержка шаблонов электронных таблиц и сохранение в .xls.

Подробно:
1. Добавлены родительские классы TOdf и ТOdfTable.
2. Добавлены классы для минимальной поддержки электронных таблиц: TOds, TOdsSheet
3. Классы TOdt, TOdtTable модифицированы, минимальный набор общих методов перенесён в TOdf и TOdfTable.
4. Доработан скрипт конвертации, переименован с macrosODT в macrosODF, т.к. дополнительно стал поддерживать конвертацию в .xls
5. В следствие добавления класса был изменён порядок параметров функций ShowDocument, GenerateDocument.
6. Функция isDocumentLoaded переименована в DocumentLoaded
7. Функция GetOfficeVersion закомментирована - не оптимальная реализация, у меня не работало. Вообще.

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

Re: Работа с uOpenOffice

Сообщение Ustas » 05.12.2013 14:49:59

Хоть бы примерчики где опубликовали...
1.В AddEntries в конце необходимо добавить FindClose(F); - иначе временная директория остается залоченой до выхода из программы, и соответственно, не удаляется из Temp;
2.Перестало быть понятно создание документа на основе шаблона (хотя подозреваю, что шаблон открывается функцией LoadFromFile, а дальше, в файл вводятся изменения, и создается GenerateDocument);
3.Созданные документ не открывается, ошибка типа: ...документ поврежден и не может быть открыт... Заархивировав другим архиватором (7z из Far) документ открывается. Правдв там какие то кракозябры...

Т.е., те фкусняшки, описанные выше, я даже не лизнул... :D

З.Ы. При первой компиляции вылетела ошибка на строке uses main; (прочитав комментарий, что это для отладки - закомментарил. И вот думаю, может этого модуля как раз и не хватает для нормальной работы... :shock: )
Ustas
постоялец
 
Сообщения: 145
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: Работа с uOpenOffice

Сообщение leo_bsv » 21.12.2013 13:41:57

Вот рабочий код из моей программы, которая в зависимости от настроек умеет печатать/показывать превьюшку/отправлять на е-мэйл нужный документ в любом из пяти форматов (.pdf, .doc, .odt .ods, .xls):
Код: Выделить всё
uses ... ... odfproc, ... ... ;

... ... ...

    procedure EndProcDoc(ODT: TOdt); overload;
    procedure EndProcDoc(ODS: TOds); overload;
    procedure ProcReceipt;

... ... ...

// завершение обработки любого документа
procedure TMF.EndProcDoc(ODS: TOds);
var FileName: string;
    DefFileName: string;
    ClientExt: string;
begin
  ClientExt:=GetClientExt;
  DefFileName:=GetDefFileName(ClientExt);

  case Doc.Action of
    daPreview: begin
                 ODS.ShowDocument;
                 if Doc.DocType<>dtReconc then SetCounter('print');
               end;
    daPrint:   begin
                 if ODS.PrintDocument then
                   if Doc.DocType<>dtReconc then SetCounter('print');
               end;
    daSend :   begin
                 ODS.GenerateDocument;
                 if ClientExt<>'.ods' then
                   ODS.ConvertTo(DefFileName,ClientExt,FileName)
                 else
                   FileName := DefFileName;

                 if not ConnectedToNet then begin
                   MessageDlg('Ошибка','Отсутствует подключение к интернету!',mtError,[mbOk],'');
                   Log.Log('Отсутствует подключение к интернету!',[]);
                   exit;
                 end;
                 if not FileExists(FileName) then begin
                   MessageDlg('Ошибка','Не найден файл документа!'+#13#10+'FileName: '+FileName,mtError,[mbOk],'');
                   Log.Log('Не найден файл документа %s',[FileName]);
                   exit;
                 end;
                 if SendMail(FileName) then begin
                     if Doc.DocType<>dtReconc then SetCounter('mail');
                     MessageDlg('Почтовое отправление','Сообщение успешно отправлено.',mtInformation,[mbOk],'');
                   end
                 else
                   MessageDlg('Почтовое отправление','Сообщение отправить не удалось.',mtError,[mbOk],'');
               end;
  end;
end;

// завершение обработки любого документа
procedure TMF.EndProcDoc(ODT: TOdt);
var FileName: string;
    DefFileName: string;
    ClientExt: string;
begin
  ClientExt:=GetClientExt;
  DefFileName:=GetDefFileName(ClientExt);

  case Doc.Action of
    daPreview: begin
                 ODT.ShowDocument;
                 if Doc.DocType<>dtReconc then SetCounter('print');
               end;
    daPrint:   begin
                 if ODT.PrintDocument then
                   if Doc.DocType<>dtReconc then SetCounter('print');
               end;
    daSend :   begin
                 ODT.GenerateDocument;
                 if ClientExt<>'.odt' then
                   ODT.ConvertTo(DefFileName,ClientExt,FileName)
                 else
                   FileName := DefFileName;

                 if not ConnectedToNet then begin
                   MessageDlg('Ошибка','Отсутствует подключение к интернету!',mtError,[mbOk],'');
                   exit;
                 end;
                 if not FileExists(FileName) then begin
                   MessageDlg('Ошибка','Не найден файл документа!'+#13#10+'FileName: '+FileName,mtError,[mbOk],'');
                   exit;
                 end;
                 if SendMail(FileName) then begin
                     if Doc.DocType<>dtReconc then SetCounter('mail');
                     MessageDlg('Почтовое отправление','Сообщение успешно отправлено.',mtInformation,[mbOk],'');
                   end
                 else MessageDlg('Почтовое отправление','Сообщение отправить не удалось.',mtError,[mbOk],'');
               end;
  end;
end;                 
 
... ... ...

// Процедура обработки документа поступления
procedure TMF.ProcReceipt;
var
    CompanyLongName, CompanyShortName, CompanyAddress, CompanyPhones,
    CompanyEmail, ClientExt: string;

  procedure GenODT;
  var ODT: TOdt;
  begin
    // Создадим файл
    ODT := TOdt.Create;
    // Подгрузим шаблон
    if not ODT.LoadFromFile('receipt_blank.odt') then exit;
    // Подпишемся
    ODT.Generator:='LibreOffice';
    ODT.Author:=CompanyShortName;
    // Вставим данные
    ODT.FindAndReplace('_ПолноеНаименование',CompanyLongName);
    ODT.FindAndReplace('_СокращенноеНаименование',CompanyShortName);
    ODT.FindAndReplace('_Адрес',CompanyAddress);
    ODT.FindAndReplace('_Телефоны',CompanyPhones);
    ODT.FindAndReplace('_Емэйл',CompanyEmail);

    if QOpen('select `long_name` from clients where clients_id = '+PQ.FieldByName('clients_id').AsString+';') then
      ODT.FindAndReplace('_Партнёр',QStr('long_name'));

    ODT.FindAndReplace('_Дата',FormatDateTime('dd.mm.yy',
                              PQ.FieldByName('date').AsDateTime));
    ODT.FindAndReplace('_Комментарий',PQ.FieldByName('comment').AsString);
    ODT.FindAndReplace('_Сумма',PQ.FieldByName('sum').AsString);
    EndProcDoc(ODT);
    ODT.Destroy;
  end;

  procedure GenODS;
  var ODS: TOds;
  begin
    // Создадим файл
    ODS := TOds.Create;
    // Подгрузим шаблон
    if not ODS.LoadFromFile('receipt_blank.ods') then exit;
    // Подпишемся
    ODS.Generator:='LibreOffice';
    ODS.Author:=CompanyShortName;
    // Вставим данные
    ODS.FindAndReplace('_ПолноеНаименование',CompanyLongName);
    ODS.FindAndReplace('_СокращенноеНаименование',CompanyShortName);
    ODS.FindAndReplace('_Адрес',CompanyAddress);
    ODS.FindAndReplace('_Телефоны',CompanyPhones);
    ODS.FindAndReplace('_Емэйл',CompanyEmail);

    if QOpen('select `long_name` from clients where clients_id = '+PQ.FieldByName('clients_id').AsString+';') then
      ODS.FindAndReplace('_Партнёр',QStr('long_name'));

    ODS.FindAndReplace('_Дата',FormatDateTime('dd.mm.yy',
                              PQ.FieldByName('date').AsDateTime));
    ODS.FindAndReplace('_Комментарий',PQ.FieldByName('comment').AsString);
    ODS.FindAndReplace('_Сумма',PQ.FieldByName('sum').AsString);
    EndProcDoc(ODS);
    ODS.Destroy;
  end;

begin

  with PQ do begin
    Close;
    SQL.Clear;
    SQL.Append('select * from fns_docs where type='+IntToStr(Ord(dtReceipt))+
         ' and fns_docs_id='+Doc.Id+';');
    Open;
    First;
  end;

  if QOpen('select * from company_info;') then begin
    CompanyLongName  := QStr('l_name');
    CompanyShortName := QStr('s_name');
    CompanyAddress   := QStr('address');
    CompanyPhones    := QStr('phones');
    CompanyEmail     := QStr('e_mail');
  end;

  ClientExt:=GetClientExt;
  EraseOldFiles;
  case ClientExt of
    '.pdf','.doc','.odt': GenODT;
    '.ods','.xls':        GenODS;
  end;
end;


Добавлено спустя 49 минут 7 секунд:
FindClose(F) добавлена.
zip c исправлением либо исходный код
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение vao78 » 15.02.2014 11:23:50

Уважаемые гуру! Подскажите как програмно изменить фон строки таблицы и отдельной ячейки.
vao78
незнакомец
 
Сообщения: 2
Зарегистрирован: 01.02.2014 18:13:10

Re: Работа с uOpenOffice

Сообщение leo_bsv » 18.02.2014 13:48:13

vao78 писал(а):Уважаемые гуру! Подскажите как програмно изменить фон строки таблицы и отдельной ячейки.

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

Re: Работа с uOpenOffice

Сообщение mr.Taiga » 29.03.2014 09:58:19

Всем добрый день. В лазарусе полный чайник,посему прошу не пинать.
Нужен простенький пример работы с OpenOffice. Суть в следующем-подгрузить шаблон, заменить в нем заданные значения (например
Код: Выделить всё
ODT.FindAndReplace('#num','123321');
) и сохранить его по указанному пути.
Пробовал через ODFProc и uOpenOffice...ничего не получается.
Вот пример моего кода
Код: Выделить всё
...uses ODFProc,uOpenOffice..;

......
procedure to_openoffise;
var ODT: TOdt;
begin
// Создадим файл
ODT := TOdt.Create;
// Подгрузим шаблон
if not ODT.LoadFromFile('C:\template.odt') then exit;
// Подпишемся
ODT.Generator:='LibreOffice';
ODT.Author:='ololo';
// Вставим данные
ODT.FindAndReplace('#num','123321');
//EndProcDoc(ODT);
odt.GenerateDocument('C:\','temlate_edit.odt');
ODT.Destroy;
end;

ОС-Win7\XP, lazarus 0.9.28.2 beta, fpc 2.2.4
mr.Taiga
незнакомец
 
Сообщения: 2
Зарегистрирован: 29.03.2014 09:29:11

Re: Работа с uOpenOffice

Сообщение alexkam » 01.04.2014 15:37:13

Как работать со штрихкодом в OpenOffice?
Каким образом можно вывести данные в штрихкод в OpenOffice?
alexkam
постоялец
 
Сообщения: 152
Зарегистрирован: 07.09.2009 20:03:59

Re: Работа с uOpenOffice

Сообщение vao78 » 04.04.2014 15:05:49

Нужен простенький пример работы с OpenOffice. Суть в следующем-подгрузить шаблон, заменить в нем заданные значения (например

Код: Выделить всё
        begin //LibreOffice
          //Друк групуючої
          odt := TOdt.Create;
          odt.LoadFromFile(Encoding(GetAppConfigDir(False) + 'monthreport.odt'));
          //Обнулення масиву загальної суми
          for j := 1 to 15 do
            suma[j] := 0;
          //Постачальник
          sqlqOrg.Close;
          sqlqOrg.SQL.Clear;
          sqlqOrg.SQL.Add(
            'SELECT fullname, posada, fam, posadagb, famgb FROM org WHERE id = 1');
          sqlqOrg.Open;
          //шапка
          //назва організації
          odt.FindAndReplace('#org#', sqlqOrg.FieldByName('fullname').AsString);
          //дата
          y := frmMonthReport.speRik.Value;
          m := frmMonthReport.CombMis.ItemIndex + 1;
          if m > 9 then
            mm := IntToStr(m)
          else
            mm := '0' + IntToStr(m);
          odt.FindAndReplace('#month#', UkrMonthStr[m]);
          odt.FindAndReplace('#year#', IntToStr(y));
          //Підписи
          odt.FindAndReplace('#pos#', sqlqOrg.FieldByName('posada').AsString);
          odt.FindAndReplace('#fam#', sqlqOrg.FieldByName('fam').AsString);
          odt.FindAndReplace('#posgb#', sqlqOrg.FieldByName('posadagb').AsString);
          odt.FindAndReplace('#famgb#', sqlqOrg.FieldByName('famgb').AsString);
          //Таблиця
          tbl := odt.GetTable('tblMonthReport');
          tbl.SetTextStyle('group', 'Times New Roman', 8, [ftBold], tpLeft);
          tbl.SetTextStyle('groupb', 'Times New Roman', 8, [ftBold], tpRight);
          tbl.SetTextStyle('client', 'Times New Roman', 8, [ftBold, ftItalic], tpLeft);
          tbl.SetTextStyle('clientb', 'Times New Roman', 8, [ftBold, ftItalic], tpRight);

          i := 2; //Номер рядка таблиці (починаеться з 0)
          sqlqClientGroup.Close;
          sqlqClientGroup.SQL.Clear;
          sqlqClientGroup.SQL.Add('SELECT * FROM clientgroup');
          sqlqClientGroup.Open;
          sqlqClientGroup.Last;
          if sqlqClientGroup.RecordCount = 0 then
          begin
            ShowMessage('Не знайдено категорій замовників.'
              + #13 + 'Друк неможливий.');
            exit;
          end;
          //Категорія
          sqlqClientGroup.First;
          for g := 1 to sqlqClientGroup.RecordCount do
          begin
            //Кліэнти
            sqlqClients.Close;
            sqlqClients.SQL.Clear;
            sqlqClients.SQL.Add('SELECT id, name FROM clients WHERE clientgroupid='
              + sqlqClientGroup.FieldByName('id').AsString);
            sqlqClients.Open;
            sqlqClients.Last;
            if sqlqClients.RecordCount <> 0 then
            begin
              tbl.MultiplyRow(i, 1);// Додаєм рядок на категорію
              //Змінити колір
              //... не реалізовано
              with tbl do
              begin //Заповнення рядка категорії
                FindAndReplace(i, '#n#', '');
                FindAndReplace(i, '#vydroboty#', sqlqClientGroup.FieldByName(
                  'name').AsString);
                for j := 1 to 15 do
                begin
                  FindAndReplace(i, nazva[j], '');
                  sumg[j] := 0;
                  //обнулення суми категорії замовника
                end;{for l}
                tbl.ApplyTextStyle(1, i, 'group');
              end;
              Inc(i);
              sqlqClients.First;
              for c := 1 to sqlqClients.RecordCount do
              begin
                //Роботи
                sqlqWork.Close;
                sqlqWork.SQL.Clear;
                sqlqWork.SQL.Add('SELECT * FROM work  WHERE (poperopl=0) AND (misgrup = '
                  + IntToStr(y) + '.' + mm + ') AND (clientid = ' +
                  sqlqClients.FieldByName('id').AsString + ')');
                sqlqWork.Open;
                sqlqWork.Last;
                if sqlqWork.RecordCount <> 0 then
                begin
                  tbl.MultiplyRow(i, 1);// Додаєм рядок замовника
                  tbl.FindAndReplace(i, '#n#', '');
                  tbl.FindAndReplace(i, '#vydroboty#',
                    sqlqClients.FieldByName('name').AsString);
                  for j := 1 to 15 do
                  begin
                    tbl.FindAndReplace(i, nazva[j], '');
                    sump[j] := 0; //обнулення суми замовника
                  end;{for j}
                  tbl.ApplyTextStyle(1, i, 'client');
                  Inc(i);
                  sqlqWork.First;
                  for w := 1 to sqlqWork.RecordCount do
                  begin
                    tbl.MultiplyRow(i, 1);// Додаєм рядок роботи
                    tbl.FindAndReplace(i, '#n#', IntToStr(w) + '.');
                    //Назва роботи
                    sqlqTypeWork.Close;
                    sqlqTypeWork.SQL.Clear;
                    sqlqTypeWork.SQL.Add('SELECT name FROM typework WHERE id='
                      + sqlqWork.FieldByName('typeworkid').AsString);
                    sqlqTypeWork.Open;
                    tbl.FindAndReplace(i, '#vydroboty#',
                      sqlqTypeWork.FieldByName('name').AsString);
                    //Мат. і МШП
                    tbl.FindAndReplace(i, nazva[1],
                      FormatFloat('0.00', sqlqWork.FieldByName('mat').AsFloat));
                    sump[1] := sump[1] + sqlqWork.FieldByName('mat').AsFloat;
                    //ПММ
                    tbl.FindAndReplace(i, nazva[2],
                      FormatFloat('0.00', sqlqWork.FieldByName('pmm').AsFloat));
                    sump[2] := sump[2] + sqlqWork.FieldByName('pmm').AsFloat;
                    //Ком.посл.
                    tbl.FindAndReplace(i, nazva[3],
                      FormatFloat('0.00', sqlqWork.FieldByName('kp').AsFloat));
                    sump[3] := sump[3] + sqlqWork.FieldByName('kp').AsFloat;
                    tbl.FindAndReplace(i, nazva[4],
                      FormatFloat('0.00', sqlqWork.FieldByName('matvytr').AsFloat));
                    sump[4] := sump[4] + sqlqWork.FieldByName('matvytr').AsFloat;
                    //ЗП виконавці
                    tbl.FindAndReplace(i, nazva[5],
                      FormatFloat('0.00', sqlqWork.FieldByName('zp').AsFloat));
                    sump[5] := sump[5] + sqlqWork.FieldByName('zp').AsFloat;
                    //ЗП водії
                    tbl.FindAndReplace(i, nazva[6],
                      FormatFloat('0.00', sqlqWork.FieldByName('vodzp').AsFloat));
                    sump[6] := sump[6] + sqlqWork.FieldByName('vodzp').AsFloat;
                    //ЗП разом
                    tbl.FindAndReplace(i, nazva[7],
                      FormatFloat('0.00', sqlqWork.FieldByName(
                      'zp').AsFloat + sqlqWork.FieldByName('vodzp').AsFloat));
                    sump[7] :=
                      sump[7] + sqlqWork.FieldByName('zp').AsFloat +
                      sqlqWork.FieldByName('vodzp').AsFloat;
                    //ПФ виконавці
                    tbl.FindAndReplace(i, nazva[8],
                      FormatFloat('0.00', sqlqWork.FieldByName('pf').AsFloat));
                    sump[8] := sump[8] + sqlqWork.FieldByName('pf').AsFloat;
                    //ПФ водії
                    tbl.FindAndReplace(i, nazva[9],
                      FormatFloat('0.00', sqlqWork.FieldByName('vodpf').AsFloat));
                    sump[9] := sump[9] + sqlqWork.FieldByName('vodpf').AsFloat;
                    //ПФ разом
                    tbl.FindAndReplace(i, nazva[10],
                      FormatFloat('0.00', sqlqWork.FieldByName(
                      'pf').AsFloat + sqlqWork.FieldByName('vodpf').AsFloat));
                    sump[10] :=
                      sump[10] + sqlqWork.FieldByName('pf').AsFloat +
                      sqlqWork.FieldByName('vodpf').AsFloat;
                    //Амортизація
                    tbl.FindAndReplace(i, nazva[11],
                      FormatFloat('0.00', sqlqWork.FieldByName('amort').AsFloat));
                    sump[11] := sump[11] + sqlqWork.FieldByName('amort').AsFloat;
                    //Непрямі витрати
                    tbl.FindAndReplace(i, nazva[12],
                      FormatFloat('0.00', sqlqWork.FieldByName('nv').AsFloat));
                    sump[12] := sump[12] + sqlqWork.FieldByName('nv').AsFloat;
                    //Всього
                    tbl.FindAndReplace(i, nazva[13],
                      FormatFloat('0.00', sqlqWork.FieldByName('vsogo').AsFloat));
                    sump[13] := sump[13] + sqlqWork.FieldByName('vsogo').AsFloat;
                    //ПДВ
                    tbl.FindAndReplace(i, nazva[14],
                      FormatFloat('0.00', sqlqWork.FieldByName('pdv').AsFloat));
                    sump[14] := sump[14] + sqlqWork.FieldByName('pdv').AsFloat;
                    //Сума
                    tbl.FindAndReplace(i, nazva[15],
                      FormatFloat('0.00', sqlqWork.FieldByName('cina').AsFloat));
                    sump[15] := sump[15] + sqlqWork.FieldByName('cina').AsFloat;
                    Inc(i);
                    sqlqWork.Next;
                  end;{for w}
                  //Підсумок по роботах
                  tbl.MultiplyRow(i, 1);// Додаєм рядок всього
                  tbl.FindAndReplace(i, '#n#', '');
                  tbl.FindAndReplace(i, '#vydroboty#', 'Всього по ' +
                    sqlqClients.FieldByName('name').AsString);
                  tbl.ApplyTextStyle(1, i, 'client');
                  for j := 1 to 15 do
                  begin
                    tbl.FindAndReplace(i, nazva[j], FormatFloat('0.00', sump[j]));
                    tbl.ApplyTextStyle(j + 1, i, 'clientb');
                    sumg[j] := sumg[j] + sump[j];
                  end;{for j}
                  Inc(i);
                end;{if sqlqWork.RecordCount}
                sqlqClients.Next;
              end;{for c}
              //Підсумок по замовнику
              tbl.MultiplyRow(i, 1);// Додаєм рядок замовника
              tbl.FindAndReplace(i, '#n#', '');
              tbl.FindAndReplace(i, '#vydroboty#', 'Всього по ' +
                sqlqClientGroup.FieldByName('name').AsString);
              tbl.ApplyTextStyle(1, i, 'group');
              for j := 1 to 15 do
              begin
                tbl.FindAndReplace(i, nazva[j], FormatFloat('0.00', sumg[j]));
                tbl.ApplyTextStyle(j + 1, i, 'groupb');
                suma[j] := suma[j] + sumg[j];
              end;{for j}
              Inc(i);
            end;{if sqlqClients.RecordCount<>0}
            sqlqClientGroup.Next;
          end;{for g}
          ShowMessage(IntToStr(i));
          //Підсумок по замовнику
          tbl.FindAndReplace(i, '#n#', '');
          tbl.FindAndReplace(i, '#vydroboty#', 'Всього за ' +
            IntToStr(y) + '.' + mm);
          tbl.ApplyTextStyle(1, i, 'group');
          for j := 1 to 15 do
          begin
            tbl.FindAndReplace(i, nazva[j], FormatFloat('0.00', suma[j]));
            tbl.ApplyTextStyle(j + 1, i, 'groupb');
          end;{for j}
          //Показ сформованого документа
          odt.ShowDocument(Encoding('monthreport.odt'));
        end;//LibreOffice
vao78
незнакомец
 
Сообщения: 2
Зарегистрирован: 01.02.2014 18:13:10

Re: Работа с uOpenOffice

Сообщение mr.Taiga » 04.04.2014 16:34:18

vao78 Спасибо,буду пробовать
mr.Taiga
незнакомец
 
Сообщения: 2
Зарегистрирован: 29.03.2014 09:29:11

Re: Работа с uOpenOffice

Сообщение Tango » 09.07.2014 09:26:51

Работает у меня uOpenOffice, я просто при присвоении перечисляемого типа Ord ставил. Где то так:

Код: Выделить всё
procedure TOOTable.SetBreakType(const Value: TOpenBT);
begin
  FTableObj.BreakType:=Ord(Value);
end;
Аватара пользователя
Tango
постоялец
 
Сообщения: 132
Зарегистрирован: 31.05.2012 17:07:30

Re: Работа с uOpenOffice

Сообщение Algoritmer » 05.11.2014 16:03:21

Подскажите пожалуйста, как получить данные из конкретной ячейки листа (TOdsSheet) ?
Algoritmer
незнакомец
 
Сообщения: 2
Зарегистрирован: 16.10.2014 18:08:24

Re: Работа с uOpenOffice

Сообщение leo_bsv » 24.01.2015 10:31:24

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

Пред.След.

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

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

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

Рейтинг@Mail.ru