Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 13
1

Как переделать код для экспорта данных в Excel под OpenOffice Calc?

25.02.2014, 20:35. Просмотров 4589. Ответов 8
Метки нет (Все метки)


Пишу дипломную. Есть код для копирования из таблицы String Grid в программу Microsoft Excel (то есть при нажатии на кнопку открывается Excel и в него вставляются данные).
Нужно переделать данный код для работы в OpenOffice Calc

Подскажите, что нужно менять в коде и можно ли это сделать стандартными средствами (без использования внешних компонент).

Собственно сам код.
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
procedure TTable1_Form.Export_To_OOCalcClick(Sender: TObject);
Var
   ExcelApp,
   ExcelSheet,
   ExcelCol,
   ExcelRow: Variant;
   Size: Byte;
   i, j, N, M: Word;
 begin
   ExcelApp:=CreateOleObject('Excel.Application');
   ExcelApp.Visible:=True;
 
   ExcelApp.Workbooks.Add(-4167);
   ExcelApp.Workbooks[1].WorkSheets[1].Name:='Report';
   ExcelCol:=ExcelApp.Workbooks[1].WorkSheets['Report'].Columns;
 
   Size:=StringGrid1.DefaultRowHeight;
   N:=StringGrid1.ColCount-1;
   For j:=0 To N Do
     ExcelCol.Columns[j+1].ColumnWidth:=Size;
 
   ExcelRow:=ExcelApp.Workbooks[1].WorkSheets['Report'].Rows;
   ExcelRow.Rows[1].Font.Bold:=True;
 
 
   ExcelSheet:=ExcelApp.Workbooks[1].WorkSheets['Report'];
   For i:=0 To StringGrid1.RowCount-1 Do
     For j:=0 To StringGrid1.ColCount-1 Do
         ExcelSheet.Cells[i+1, j+1]:=WideString(Utf8Decode(StringGrid1.Cells[j, i]));
 end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2014, 20:35
Ответы с готовыми решениями:

Приложение под MS Excel или OpenOffice Calc которое показывало бы все варианты комбинаций
Пожалуйста помогите кодом, для приложения на VBA под OpenOffice Calc или MS Excel (2003 или 2007...

Запись данных в OpenOffice.Calc 4.1.1
Всем привет,кто знает как связать C# и OpenOffice Calc? Мне нужно с программы отправить туда данные...

Запись данных из datagrid в OpenOffice.Calc 4.1.2
делала как здесь https://www.cyberforum.ru/windows-forms/thread1486867.html но выводит ошибку что...

Макрос для OpenOffice Calc
Ситуация такая например есть строка: товар (его качества) Цена. Необходимо все что в скобках...

__________________
Помогаю в написании студенческих работ здесь.
8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30870 / 20191 / 7875
Регистрация: 22.10.2011
Сообщений: 35,052
Записей в блоге: 6
25.02.2014, 22:15 2
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Не нужны никакие компоненты:
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
Var
  Size: Byte;
  i, j, n: Word;
 
  OO, Desktop: Variant;
  Doc, Sheet: Variant;
  Col, Cell: Variant;
  s: string;
const
  BoldFont = 150;
begin
  OO := CreateOleObject('com.sun.star.ServiceManager');
  Desktop := OO.createInstance('com.sun.star.frame.Desktop');
  Doc := Desktop.LoadComponentFromURL('private:factory/scalc', '_blank', 0,
    VarArrayCreate([0, -1], varVariant));
 
  for i := Doc.getSheets.Count - 1 downto 1 do
  begin
    s := Doc.getSheets.GetByIndex(i).getName;
    Doc.getSheets.RemoveByName(s);
  end;
 
  Size := StringGrid1.DefaultRowHeight;
  Sheet := Doc.getSheets.GetByIndex(0);
  Sheet.Name := 'Report';
  n := StringGrid1.ColCount - 1;
  for i := 0 to n do
  begin
    Col := Sheet.getColumns.GetByIndex(i);
    Col.setPropertyValue('Width', 2 * 100 * Size); // В сотых долях миллиметра
  end;
 
  for i := 0 to StringGrid1.RowCount - 1 do
    for j := 0 to StringGrid1.ColCount - 1 do
    begin
      if i = 0 then
      begin
        Sheet.getCellByPosition(j, i).getText.createTextCursor.CharWeight
          := BoldFont;
      end;
      Cell := Sheet.getCellByPosition(j, i);
      Cell.String := StringGrid1.Cells[j, i];
    end;
end;
, только что отработало (Delphi XE2 + OO 4.0.1)
1
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 13
04.03.2014, 16:20  [ТС] 3
В Lazarus ошибку выдаёт.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30870 / 20191 / 7875
Регистрация: 22.10.2011
Сообщений: 35,052
Записей в блоге: 6
04.03.2014, 18:13 4
Для Лазаруса, вообще-то, есть отдельный раздел. Впредь все вопросы по Лазарусу задавай туда.

Добавлено через 43 минуты
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
uses ..., comobj, variants;
 
// ...
 
procedure TForm1.Button1Click(Sender: TObject);
Var
  Size: Byte;
  i, j, n: Word;
 
  OO, Desktop: Variant;
  Doc, Sheet: Variant;
  Col, Cell: Variant;
  s: widestring;
const
  BoldFont = 150;
begin
  OO := CreateOleObject('com.sun.star.ServiceManager');
  Desktop := OO.createInstance('com.sun.star.frame.Desktop');
  Doc := Desktop.LoadComponentFromURL('private:factory/scalc', '_blank', 0,
    VarArrayCreate([0, -1], varVariant));
 
  for i := Doc.getSheets.Count - 1 downto 1 do
  begin
    s := WideString(Doc.getSheets.GetByIndex(i).getName);
    Doc.getSheets.RemoveByName(s);
  end;
 
  Size := StringGrid1.DefaultRowHeight;
  Sheet := Doc.getSheets.GetByIndex(0);
  Sheet.Name := 'Report';
  n := StringGrid1.ColCount - 1;
  for i := 0 to n do
  begin
    Col := Sheet.getColumns.GetByIndex(i);
    Col.setPropertyValue('Width', 2 * 100 * Size); // В сотых долях миллиметра
  end;
 
  for i := 0 to StringGrid1.RowCount - 1 do
    for j := 0 to StringGrid1.ColCount - 1 do
    begin
      if i = 0 then
      begin
        Sheet.getCellByPosition(j, i).getText.createTextCursor.CharWeight
          := BoldFont;
      end;
      Cell := Sheet.getCellByPosition(j, i);
      Cell.SetString(WideString(UTF8Decode(StringGrid1.Cells[j, i])));
    end;
end;
прекрасно заполняет таблицу из Лазарусовского приложения...
1
159 / 98 / 25
Регистрация: 07.03.2013
Сообщений: 508
Записей в блоге: 1
25.08.2014, 13:53 5
UI, под линукс ругается на объявление "comobj"
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30870 / 20191 / 7875
Регистрация: 22.10.2011
Сообщений: 35,052
Записей в блоге: 6
25.08.2014, 14:00 6
Да, с *nix-ами проблема:
Office Automation
On Windows, OpenOffice can also be manipulated in Pascal via COM Automation (see below), but there is currently no easy way of using OpenOffice's UNO (Universal Network Objects) from Pascal on OS X and Linux.
0
159 / 98 / 25
Регистрация: 07.03.2013
Сообщений: 508
Записей в блоге: 1
25.08.2014, 14:52 7
Цитата Сообщение от UI Посмотреть сообщение
Да, с *nix-ами проблема:
И что же делать? Собственно ради *nix всё затевалось...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30870 / 20191 / 7875
Регистрация: 22.10.2011
Сообщений: 35,052
Записей в блоге: 6
25.08.2014, 15:07 8
Искать в сети исходники проектов, работающих с OO через UNO (они в Бета-версиях, но есть). Вот пример:
Раз: Delphi-UNO bridge
Два: ODFProc (вот тут есть примеры работы с этим модулем: Ubuntu + Lazarus + OpenOffice = «Hello World!»), и допиливать функционал под себя.

Либо переходить на те языки, для которых есть биндинги OO...
1
411 / 345 / 126
Регистрация: 09.09.2011
Сообщений: 1,237
25.08.2014, 15:46 9
либо использовать библиотеки/компоненты - которые пишут прямо в файлы форматов офиса (МС или LF).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2014, 15:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Код для экспорта данных из формы в Word
Здравствуйте! Подскажите пожалуйста код для экспорта данных из формы в Word

Макрос в OpenOffice Calc, как получить полный путь к файлу?
Здравствуйте! Делаю макрос в OO Calc , вывожу полный путь к файлу MsgBox ThisComponent.Location...

Как лучше реализовать классы для экспорта в Excel?
Всем привет! Приложение должно иметь возможность экспортировать отчеты в эксель. Я в затруднении,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.