Вывод отчетов в Excel,OpenOffice

Вопросы программирования и использования среды Lazarus.

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

Вывод отчетов в Excel,OpenOffice

Сообщение Frolik » 25.09.2011 01:29:33

Откройте вложение в блокноте. Переименуйте в xls и откройте в экселе. Переименуйте в ods, откройте в OO. Переименуйте в html, откройте в браузере. Может быть это уже старо как мир, но я решил поделиться, вдруг мужики не знают.
Код: Выделить всё
            
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 10">
<link rel=File-List href="1316610546.files/filelist.xml">
<link rel=Edit-Time-Data href="1316610546.files/editdata.mso">
<link rel=OLE-Object-Data href="1316610546.files/oledata.mso">
<!--[if gte mso 9]><xml>
<o:DocumentProperties>
  <o:LastAuthor>SamLab.ws</o:LastAuthor>
  <o:LastSaved>2011-09-21T13:20:18Z</o:LastSaved>
  <o:Version>10.2625</o:Version>
</o:DocumentProperties>
<o:OfficeDocumentSettings>
  <o:DownloadComponents/>
  <o:LocationOfComponents HRef="file:///\\Fserv\public\Install\-SOFT\OFFICE\OfficeXP\"/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
<style>
<!--table
   {mso-displayed-decimal-separator:"\,";
   mso-displayed-thousand-separator:" ";}
@page
   {margin:1.0in .75in 1.0in .75in;
   mso-header-margin:.5in;
   mso-footer-margin:.5in;}
tr
   {mso-height-source:auto;}
col
   {mso-width-source:auto;}
br
   {mso-data-placement:same-cell;}
.style0
   {mso-number-format:General;
   text-align:general;
   vertical-align:bottom;
   white-space:nowrap;
   mso-rotate:0;
   mso-background-source:auto;
   mso-pattern:auto;
   color:windowtext;
   font-size:10.0pt;
   font-weight:400;
   font-style:normal;
   text-decoration:none;
   font-family:Arial;
   mso-generic-font-family:auto;
   mso-font-charset:0;
   border:none;
   mso-protection:locked visible;
   mso-style-name:Обычный;
   mso-style-id:0;}
td
   {mso-style-parent:style0;
   padding-top:1px;
   padding-right:1px;
   padding-left:1px;
   mso-ignore:padding;
   color:windowtext;
   font-size:10.0pt;
   font-weight:400;
   font-style:normal;
   text-decoration:none;
   font-family:Arial;
   mso-generic-font-family:auto;
   mso-font-charset:0;
   mso-number-format:General;
   text-align:general;
   vertical-align:bottom;
   border:none;
   mso-background-source:auto;
   mso-pattern:auto;
   mso-protection:locked visible;
   white-space:nowrap;
   mso-rotate:0;}
.xl24
   {mso-style-parent:style0;
   white-space:normal;}
.xl25
   {mso-style-parent:style0;
   border:1.0pt solid windowtext;}
-->
</style>
<!--[if gte mso 9]><xml>
<x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>
    <x:Name>srirmam</x:Name>
    <x:WorksheetOptions>
     <x:Selected/>
     <x:Panes>
      <x:Pane>
       <x:Number>3</x:Number>
       <x:ActiveRow>5</x:ActiveRow>
       <x:ActiveCol>4</x:ActiveCol>
      </x:Pane>
     </x:Panes>
     <x:ProtectContents>False</x:ProtectContents>
     <x:ProtectObjects>False</x:ProtectObjects>
     <x:ProtectScenarios>False</x:ProtectScenarios>
    </x:WorksheetOptions>
   </x:ExcelWorksheet>
  </x:ExcelWorksheets>
  <x:WindowHeight>10005</x:WindowHeight>
  <x:WindowWidth>10005</x:WindowWidth>
  <x:WindowTopX>120</x:WindowTopX>
  <x:WindowTopY>135</x:WindowTopY>
  <x:ProtectStructure>False</x:ProtectStructure>
  <x:ProtectWindows>False</x:ProtectWindows>
</x:ExcelWorkbook>
</xml><![endif]-->
</head>

            

<body link=blue vlink=purple>

<table x:str border=0 cellpadding=0 cellspacing=0 width=377 style='border-collapse:
collapse;table-layout:fixed;width:283pt'>
<col width=35 style='mso-width-source:userset;mso-width-alt:1280;width:26pt'>
<col width=135 style='mso-width-source:userset;mso-width-alt:4937;width:101pt'>
<col width=66 style='mso-width-source:userset;mso-width-alt:2413;width:50pt'>
<col width=70 style='mso-width-source:userset;mso-width-alt:2560;width:53pt'>
<col width=71 style='mso-width-source:userset;mso-width-alt:2596;width:53pt'>
<tr height=124 style='mso-height-source:userset;height:93.0pt'>
  <td height=124 class=xl24 align=left width=35 style='height:93.0pt;
  width:26pt'></td>
  <td class=xl24 align=left width=135 style='width:101pt'>Этот текст на русском</td>
  <td class=xl24 align=left width=66 style='width:50pt'>Das ist fantastish</td>
  <td class=xl24 align=left width=70 style='width:53pt'></td>
  <td class=xl24 align=left width=71 style='width:53pt'></td>
</tr>
<tr height=17 style='height:12.75pt'>
  <td height=17 colspan=2 style='height:12.75pt;mso-ignore:colspan'></td>
  <td align=right x:num>1</td>
  <td align=right x:num>5</td>
  <td></td>
</tr>
<tr height=17 style='height:12.75pt'>
  <td height=17 colspan=2 style='height:12.75pt;mso-ignore:colspan'></td>
  <td align=right x:num>2</td>
  <td colspan=2 style='mso-ignore:colspan'></td>
</tr>
<tr height=17 style='height:12.75pt'>
  <td height=17 colspan=2 style='height:12.75pt;mso-ignore:colspan'></td>
  <td align=right x:num>3</td>
  <td colspan=2 style='mso-ignore:colspan'></td>
</tr>
<tr height=18 style='height:13.5pt'>
  <td height=18 colspan=2 style='height:13.5pt;mso-ignore:colspan'></td>
  <td align=right x:num>4</td>
  <td colspan=2 style='mso-ignore:colspan'></td>
</tr>
<tr height=18 style='height:13.5pt'>
  <td height=18 colspan=2 style='height:13.5pt;mso-ignore:colspan'></td>
  <td class=xl25 align=right x:num x:fmla="=SUM(C2:C5)*0.1">50</td>
  <td colspan=2 style='mso-ignore:colspan'></td>
</tr>
<![if supportMisalignedColumns]>
<tr height=0 style='display:none'>
  <td width=35 style='width:26pt'></td>
  <td width=135 style='width:101pt'></td>
  <td width=66 style='width:50pt'></td>
  <td width=70 style='width:53pt'></td>
  <td width=71 style='width:53pt'></td>
</tr>
<![endif]>
</table>

</body>

</html>
Frolik
постоялец
 
Сообщения: 275
Зарегистрирован: 18.08.2011 11:52:32

Re: Вывод отчетов в Excel,OpenOffice

Сообщение Ism » 25.09.2011 01:34:01

И что это ?
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Вывод отчетов в Excel,OpenOffice

Сообщение Frolik » 25.09.2011 03:26:49

Это одновременно шаблон и пример для генерации текстового документа, который открывается в Экселе, Опеноффисе. Можно создавать отчеты не используя ole.
Frolik
постоялец
 
Сообщения: 275
Зарегистрирован: 18.08.2011 11:52:32

Re: Вывод отчетов в Excel,OpenOffice

Сообщение Ism » 25.09.2011 14:54:27

2011 год, настало время телепатов и экстрасенсов
И как это использовать ? Мануал
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Вывод отчетов в Excel,OpenOffice

Сообщение *Rik* » 25.09.2011 16:34:53

Портирую с Delphi свой интерпретатор Object Pacal на Lazarus, в нем поддерживается OLE, из скрипта можно обращаться к com серверам с таким-же успехом как и из Delphi, дельфийский код для вывода отчетов в Excel или OpenOffice будет работать и в скрипте с небольшими поправками.
Работа ещё не закончена, смотрите здесь, возможно вам поможет.
viewtopic.php?f=14&t=6974
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Вывод отчетов в Excel,OpenOffice

Сообщение sign » 26.09.2011 06:44:14

А что за проблема?
У меня лазарус замечательно работает с automation OpenOffice.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Вывод отчетов в Excel,OpenOffice

Сообщение Frolik » 26.09.2011 14:36:10

Проблем нет. Просто используя шаблон одного индуса можно создавать файлы, которые одинаково будут открываться в браузере, экселе, опеноффисе. При этом не требуется ole, automation OpenOffice, никаких дополнительных модулей. Доберусь, напишу простенький пример. Пока некогда, а то что есть, включено в проект.
Frolik
постоялец
 
Сообщения: 275
Зарегистрирован: 18.08.2011 11:52:32

Re: Вывод отчетов в Excel,OpenOffice

Сообщение вася » 26.09.2011 19:14:56

E.WorkSheets[1].Cells[e1,e2].NumberFormat:='@' ;
В Delphi такой код работает, а вот в lazaruse нет.
Подскажите что делать?
вася
незнакомец
 
Сообщения: 3
Зарегистрирован: 26.09.2011 19:07:20

Re: Вывод отчетов в Excel,OpenOffice

Сообщение sign » 27.09.2011 12:03:35

Скорей всего, это delphi переводит в окончательный вид, поскольку

Таблица 262. Константы из группы констант com.sun.star.util.NumberFormat.
Константа Значение Описание
0 ALL Все числовые форматы.
1 DEFINED Пользовательские числовые форматы.
2 DATE Форматы даты.
4 TIME Форматы времени.
8 CURRENCY Форматы валюты.
16 NUMBER Форматы десятичных чисел.
32 SCIENTIFIC Экспоненциальные форматы чисел.
64 FRACTION Числовые форматы для дробей.
128 PERCENT Процентные числовые форматы.
256 TEXT Текстовые числовые форматы.
6 DATETIME Форматы чисел, которые содержат дату и время.
1024 LOGICAL Логические форматы чисел.
2048 UNDEFINED Используется, если числовой формат не существует.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Вывод отчетов в Excel,OpenOffice

Сообщение вася » 27.09.2011 15:42:43

sign
Спасибо!
Воспользуюсь советом :)

Добавлено спустя 19 часов 25 минут 22 секунды:
Попробовал.
Результат отрицательный.
Формат ячейки не меняет, выкидывает ошибку.
Код не работает.
Подскажите в чем я не прав?
Заранее благодарен за помощь.
вася
незнакомец
 
Сообщения: 3
Зарегистрирован: 26.09.2011 19:07:20

Re: Вывод отчетов в Excel,OpenOffice

Сообщение sign » 29.09.2011 09:42:37

У меня всё работает.

Код: Выделить всё
    FOO:          variant;
    FDocument:    variant;

    FSheetsObj: variant;
    FSheetObj: variant;
    FCellObj: variant;

    property Document: variant read FDocument write FDocument;
    property Sheets: variant read FSheetsObj write FSheetsObj;
    property Sheet: variant read FSheetObj write FSheetObj;
    property NumberFormat[aCol, aRow: Integer]: Integer read GetNumberFormat write SetNumberFormat;

Код: Выделить всё
constructor TOpenOffice.Create(aVisible: Boolean = False);
begin
  inherited Create;
  Connect;
  FFileName:='';
  FProgType:='';
end;

Код: Выделить всё
function TOpenOffice.Connect: boolean;
begin
if VarIsEmpty(FOO) then FOO := CreateOleObject('com.sun.star.ServiceManager');
Result := not (VarIsEmpty(FOO) or VarIsNull(FOO));
end;

Код: Выделить всё
function TOpenOffice.CreateDocument: boolean;
var Desktop: Variant;
begin
  Desktop := FOO.CreateInstance('com.sun.star.frame.Desktop');
  FDocument := Desktop.LoadComponentFromURL(WideString(Utf8ToAnsi(FFileName)), '_blank', 0, VarArrayCreate([0, -1], varVariant));
  Result := not (VarIsEmpty(FDocument) or VarIsNull(FDocument));
end;

Код: Выделить всё
function  TCalc.CreateDocument: Boolean;
begin
  if inherited then begin
    Sheets := Document.GetSheets;
    CurrentSheet := 0;
    Result := True;
  end else Result := False;
end;

Код: Выделить всё
function TCalc.Open(const FileName: String; Visible: Boolean = false): Boolean;
begin
  if inherited then begin
    Sheets := Document.GetSheets;
    CurrentSheet := 0;
    FCellObj := Sheet.getCellByPosition(FCol, FRow);
    Result := True;
  end else Result := False;
end;

Код: Выделить всё
function TCalc.GetNumberFormat(aCol, aRow: Integer): Integer;
begin
  GoCell(aCol, aRow);
  Result := FCellObj.NumberFormat;
end;

procedure TCalc.SetNumberFormat(aCol, aRow, aFormat: Integer);
begin
  GoCell(aCol, aRow);
  FCellObj.NumberFormat := aFormat;
end;


Код: Выделить всё
procedure TCalc.GoCell(aCol, aRow: Integer);
var dispatcher, AR:variant;
begin
  dispatcher := FOO.CreateInstance('com.sun.star.frame.DispatchHelper');
  Ar := VarArrayCreate([0, 0], varVariant);
  Ar[0] := MakePropertyValue('ToPoint', CellAddres(aCol, aRow));
  dispatcher.executeDispatch(FDocument.GetCurrentController.GetFrame, '.uno:GoToCell', '', 0, Ar);
  GetCell(aCol, aRow);
  Ar := Unassigned;
  dispatcher := Unassigned;
end;


Код: Выделить всё
function TCalc.GetCell(aCol, aRow: Integer): variant;
begin
  if (FRow <> aRow) or (FCol <> aCol) then begin
    FCol := aCol;
    FRow := aRow;
    FCellObj := Sheet.getCellByPosition(FCol, FRow);
  end;
  Result := FCellObj;
end;
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Вывод отчетов в Excel,OpenOffice

Сообщение vv95 » 01.07.2012 09:00:26

Спасибо Frolik ,
Все другие способы не позволили мне выводить записи в ОО и EXCEL на разных языках (4 языка) с одного компа.
Ole и остальное не пишут unicode в EXCEL.
vv95
незнакомец
 
Сообщения: 1
Зарегистрирован: 01.07.2012 08:53:01


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 244

Рейтинг@Mail.ru