Работа с uOpenOffice

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

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

Re: Работа с uOpenOffice

Сообщение Владимир » 21.12.2011 08:34:30

leo_bsv писал(а):Пишите ваши наблюдения и мысли. Бум допиливать.

Доброго!
1.Вызов ShowDocument без параметров работает на классе, но у меня по умолчанию запускается Okular (очень долго) и документ не успевает открыться (рано удаляется /temp). Спасает sleep(2000) перед удалением.
2.Вызов ShowDocument с пустыми параметрами вообще лишен смысла, поэтому этот вопрос закрываем.
Из наболевшего - по важности.
1.Очень нужен AppendRow (там, похоже, Cols не определена - я писал выше).
2.Удаление пустых строк по содержимому ячейки - предлагаю упростить алгоритм - удалять строку, если содержимое первой ячейки равно шаблону.
3.AppendCols.
Как-то так.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 21.12.2011 18:08:20

Владимир писал(а):2.Вызов ShowDocument с пустыми параметрами вообще лишен смысла, поэтому этот вопрос закрываем.

Вообще-то определение процедуры в подобном виде
Код: Выделить всё
procedure ShowDocument(editor:string='xdg-open'; f_name:string='doc.odt');

позволяет опускать параметры при вызове, т.е. эту процедуру можно вызвать и таким образом:
Код: Выделить всё
ShowDocument('my_editor', 'new.odt');

и таким:
Код: Выделить всё
ShowDocument;

можно также запустить таким образом:
Код: Выделить всё
ShowDocument('my_second_editor');

добавил условие для передачи пустой строки в параметр editor:
Код: Выделить всё
procedure TOdt.ShowDocument(editor:string='xdg-open';
                            f_name:string='doc.odt');
var exe_path, templ_path, sh: string;
    Proc: TProcess;
begin
  if editor='' then editor:='xdg-open';
  exe_path:=ExtractFilePath(Application.ExeName);
  {$IFDEF Linux}
  templ_path:=IncludeTrailingPathDelimiter(exe_path+'temp');
  GenerateDocument(templ_path,f_name,'');
  try
    Proc:=TProcess.Create(nil);
    Proc.CommandLine:=editor+' '+templ_path+f_name;
    Proc.Options:=[poWaitOnExit];
    Proc.ShowWindow:=swoShowMaximized;
    Proc.Execute;
  finally
    if Proc.WaitOnExit then begin
      Proc.CommandLine:='rm '+templ_path+' -r';
      Proc.Execute;
      Proc.Free;
    end;
  end;
  {$ENDIF}
end;

Поэтому теперь можно запускать процедуру даже так:
Код: Выделить всё
ShowDocument('','myfile.odt')
Последний раз редактировалось leo_bsv 21.12.2011 18:50:39, всего редактировалось 2 раз(а).
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Владимир » 21.12.2011 18:19:44

leo_bsv писал(а):позволяет опускать параметры при вызове

Да понимаю я, я говорю о бессмысленности вызова с ПУСТЫМИ параметрами.
Нарисовалась какая-то бредятина - сделал новый проект специально для тестирования ODFProc. Все, что касается класса TOdt - живет, TodtTable - в упор не видит. Второй час чешу заднюю часть того места, где должны быть мозги - напрасно. В живом проекте TODTTable работает, в тестовом -нет...
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 21.12.2011 18:54:08

Владимир писал(а):Да понимаю я, я говорю о бессмысленности вызова с ПУСТЫМИ параметрами.

С пустыми параметрами вызов не получится - будет ошибка :) (конечно если задать пустым первый параметр - то ошибки не будет - в последней ревизии я добавил условие чтобы первый пустой параметр заменялся значением по-умолчанию, второй пустой - ошибка, второй не определён - запустится)
При таком объявлении - можно просто все параметры опустить, и тогда всё запустится по-умолчанию.

Добавлено спустя 1 минуту 15 секунд:
Владимир писал(а):сделал новый проект специально для тестирования ODFProc. Все, что касается класса TOdt - живет, TodtTable - в упор не видит

у меня тоже спец проект для тестирования. всё компилится... у тебя не компилится вообще? или компилится но не видит ТOdtTable?

Добавлено спустя 7 минут 53 секунды:
по поводу sleep(2000), достаточно костыльное решение,.. а если док будет очень здоровым - двух секунд может не хватить... думаю следует копать в сторону xdg-open... нужен контроль над запущенным ею приложением, может быть кто что подскажет путное?
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Владимир » 21.12.2011 20:11:43

leo_bsv писал(а):компилится но не видит ТOdtTable?

Ага, компилится, но не видит TOdtTtable. Заметил отличие в старых проектах, где все Ок, и в новом - там появился каталог /lib/i386-linux, в котором собраны все файлы .o .or .res .lfm .ppu. В старых проектах эти файлы в каталоге проекта. Я в расстройстве, что делать?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 21.12.2011 21:27:28

Владимир писал(а):Ага, компилится, но не видит TOdtTtable.

TOdtTable проверен следующим кодом
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var ODT: TOdt;
    T: TOdtTable;
begin
   ODT:=TOdt.Create;
   ODT.LoadTemplate(FNE.Text);
   // Заполним таблицу
   T:=ODT.GetTable('Таблица1');
   T.MultiplyRow(1,5);
   ODT.ShowDocument;
   ODT.Destroy;   
end;

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

Re: Работа с uOpenOffice

Сообщение Владимир » 21.12.2011 21:29:53

leo_bsv писал(а):Работает...

И у меня работает - когда проект скопировал из старого...
Пока для пользы дела вопрос про /lib в проекте снимаю. Разберусь позже.
Касательно sleep() согласен с "костылями", однако, если путь запуска указан жестко, таких катаклизмов не видно!
И потом, какая пользователю разница - будет удален /temp через 2 или 10 сек или 20 сек ?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 22.12.2011 02:15:42

обновил ещё раз - темп-файлы теперь все в папке /tmp и чистятся при уничтожении объекта класса TOdt;
sleep пришлось оставить при запуске через xdg-open, т.к. другие решения не дали нужного результата;
но процедура переписана таким образом, что если из программы явно будет указываться редактор для открытия файла - ничего тормозить не должно, в этом случае sleep не срабатывает. :)
11 ревизия
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Владимир » 22.12.2011 11:34:28

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

Re: Работа с uOpenOffice

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

leo_bsv писал(а):
Re: Работа с uOpenOffice

Сообщение leo_bsv » 22.12.2011 01:15:42
обновил ещё раз


Доброго! Боюсь показаться назойливым, но очень нужно добавление колонок (AppendCols).
Хотелось бы все косяки добить в уходящем году...
Да, с наступающим НГ!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 27.12.2011 20:59:25

Владимир писал(а):Боюсь показаться назойливым

а вы не бойтесь ) у меня тож проект один висит в котором этот функционал будет необходим =)
так что лучше сейчас допиливать по-тихому чем потом всё разом ;)
другое дело что времени в обрез... быстро может не получиться... :?

Добавлено спустя 56 минут 8 секунд:
12 ревизия - допилена TOdtTable.AppendRow, просьба тестить

Добавлено спустя 1 час 40 минут 10 секунд:
13 ревизия - TOdtTable.AppendColumn работает, но создаёт колонку шириной 0, общая ширина таблицы тоже не меняется, в итоге после добавления колонки её не видно. Поэтому для нормального функционала нужно будет обрабатывать ширину таблицы и ширину добавляемой колонки или ширину добавляемой колонки и соответствующим образом уменьшать ширину уже существующих. Это пока не реализовано.
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Работа с uOpenOffice

Сообщение Владимир » 28.12.2011 10:29:44

leo_bsv писал(а):допилена TOdtTable.AppendRow, просьба тестить

Что изменилось - так это заработало чтение Table.Cols. AppendRow по-прежнему не работает (но и не валит приложение). В самой процедуре Cols почему-то 9-тизначное (при таблице в 5 столбцов).
Вообще-то при наличии MultiplyRow большого смысла в AppendRow не вижу.
По поводу AppendColumn - работает, добавляет столбец нулевой ширины. В идеале хотелось бы при добавлении явно указывать ширину ColWidths[n] всех столбцов (и, возможно, ширину таблицы Width). С точки зрения пользователя алгоритм примерно такой:
1. Читаем ширины существующих столбцов.
2. Устанавливаем ширины существующих и добавляем столбец нужной ширины.
Считаю, что для начала не следует связываться с объединенными ячейками, пусть будет простая таблица.
p.s. Если интересно, могу поделиться допиленным под Utf8 модулем "Сумма прописью". Также сделал шаблоны форм КМ-3 и КМ-6.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 28.12.2011 12:49:53

Владимир писал(а):Вообще-то при наличии MultiplyRow большого смысла в AppendRow не вижу.

Признаться, я, когда в своё время реализовывал MultiplyRow, сначала хотел сделать AppendRow, но потом желание отпало из этих же соображений.
Владимир писал(а):В самой процедуре Cols почему-то 9-тизначное (при таблице в 5 столбцов).

поподробнее опиши ситуацию - у меня при тестах всё работало, судя по формам - у тебя сложнее таблицы
Владимир писал(а):Считаю, что для начала не следует связываться с объединенными ячейками, пусть будет простая таблица.

Кстати эт всё тоже возможно, сейчас думаю как в удобном виде воссоздать структуру таблицы в классе...
Владимир писал(а):p.s. Если интересно, могу поделиться допиленным под Utf8 модулем "Сумма прописью". Также сделал шаблоны форм КМ-3 и КМ-6.

Предлагаю выложить твои формы на странице проекта на sourceforge.net... мне лично пока нужды в этом нет, но чем чёрт не шутит...

Добавлено спустя 11 минут 38 секунд:
Владимир писал(а):могу поделиться допиленным под Utf8 модулем "Сумма прописью"

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

Re: Работа с uOpenOffice

Сообщение Владимир » 28.12.2011 14:20:11

leo_bsv писал(а):а вот от этого не откажусь

Зарегистрировался на SourceForge - дальше куда и как идти-выкладывать - не могу разобраться
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Работа с uOpenOffice

Сообщение leo_bsv » 28.12.2011 16:09:28

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

Пред.След.

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

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

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

Рейтинг@Mail.ru