Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Cохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог  [new]
GAZot
Member

Откуда:
Сообщений: 1
Здравствуйте уважаемые форумчане! Мне надо в Lazarus-е сохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог. Вот попробовал написать код, но вопросы остались
TfMain.miSaveToOOWriterClick(Sender: TObject);
var
  r, c: Integer;
  fn: string;
  s : string;
begin
  if SaveDialog.InitialDir = '' then
    SaveDialog.InitialDir := ExtractFilePath(ParamStr(0));
  if SaveDialog.Execute then
    fn := SaveDialog.FileName
  else
    exit; 
  if VarIsEmpty(ServiceManager) then
    try
      ServiceManager := CreateOleObject('com.sun.star.ServiceManager');
    except
      raise Exception.Create('Couldn''t get ServiceManager');
      Exit;
    end;
  CoreReflection :=
    ServiceManager.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(PropertyValue);
  VA := VarArrayCreate([0, 0], varVariant);
  VA[0] := PropertyValue;
  StarDesktop := ServiceManager.CreateInstance('com.sun.star.frame.Desktop');
  Document := StarDesktop.LoadComponentFromURL('private:factory/swriter',
    '_blank', 0, VA);
  if (VarIsNull(Document) or VarIsEmpty(Document)) then
  begin
    raise Exception.Create('Couldn''t create document');
    Exit;
  end;
  objText := Document.getText;
  objCursor := objText.createTextCursor;
  objCursor.SetPropertyValue('CharFontName', 'Arial Black'); //шрифт
  objCursor.SetPropertyValue('CharHeight', 16); //размер
  objCursor.SetPropertyValue('CharWeight',200);     //жирный
  objCursor.SetPropertyValue('CharUnderline', 1); //подчеркнутый
  {для ParaAjust параметр Align=0(left), =1(Right), =2(block, по краям), =3(центр)}
  // objCursor.SetPropertyValue('ParaAjust', 3);
  s := 'Здесь будет название таблицы'; //название таблицы
  objText.insertString(objCursor, WideString(s), false);
  objText.insertControlCharacter(objCursor, 1, false);//Пропуск строки
  Table := Document.createInstance('com.sun.star.text.TextTable');//Вставка таблицы
  Table.Initialize(sgTable.RowCount, sgTable.ColCount); //row, column
  Table.HoriOrient := 0;
  Table.LeftMargin := 500; // 2* 1/100 mm;
  Table.RightMargin := 200;
  Document.getText.insertTextContent(objCursor, Table, false);
  for r := 0 to Pred(sgTable.RowCount) do
  begin
    for c := 0 to Pred(sgTable.ColCount) do
    begin
      cell := table.getCellByName(WideString(Format('%s%d', [Chr(Ord('A') + C),
        R + 1])));
      cell.getText.createTextCursor.CharFontName := 'Arial';
      cell.getText.createTextCursor.CharHeight := 14; //
  //   cell.getText.createTextCursor.CharWeigth := 200; //
      cell.getText.createTextCursor.CharPosture := 1;
  //    cell.getText.createTextCursor.ParaAjust := 3;
      cell.SetString(WideString(sgTable.Cells[C, R]));
    end;
  end;

  //Вот здесь хочу всё сохранить, но не знаю как 

  Document.Close(True);
  Document  := Unassigned;
  StarDesktop := Unassigned;
  ServiceManager := Unassigned;  
end;          
[/SRC]
1. Как всё сохранить не показывая самого документа
2. Если StringGrid цветной есть ли возможность перенести и цвета ячейки
6 апр 21, 12:05    [22304974]     Ответить | Цитировать Сообщить модератору
 Re: Cохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 2242
GAZot
Как всё сохранить не показывая самого документа

Найти либу, которая реаилзует dom для odt на паскале с форматированием и всеми делами.

https://github.com/dgaspary/fpOdf

Это типа оно, но не ручаюсь за её состояние.

Сообщение было отредактировано: 6 апр 21, 12:21
6 апр 21, 12:28    [22304996]     Ответить | Цитировать Сообщить модератору
 Re: Cохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6722
GAZot,

или вот тоже топик был, там автор довольно проработанную библиотеку разработал, можно посмотреть реализацию отдельных фич если не хотите всю: Delphi & OpenOffice - Заполним пробел и генерация TLB здесь 9057936
6 апр 21, 14:23    [22305057]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить