Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Cохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог / 3 сообщений из 3, страница 1 из 1
06.04.2021, 12:05
    #40060101
GAZot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог
Здравствуйте уважаемые форумчане! Мне надо в Lazarus-е сохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог. Вот попробовал написать код, но вопросы остались
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
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 цветной есть ли возможность перенести и цвета ячейки
...
Рейтинг: 0 / 0
06.04.2021, 12:28
    #40060112
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог
GAZot
Как всё сохранить не показывая самого документа

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

https://github.com/dgaspary/fpOdf

Это типа оно, но не ручаюсь за её состояние.
...
Рейтинг: 0 / 0
06.04.2021, 14:23
    #40060153
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог
GAZot,

или вот тоже топик был, там автор довольно проработанную библиотеку разработал, можно посмотреть реализацию отдельных фич если не хотите всю: Delphi & OpenOffice - Заполним пробел и генерация TLB здесь 9057936
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Cохранить содержимое StringGrid-а в документ OpenOffice Writer через диалог / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]