если кому будет интересно:
http://ifolder.ru/16292010По работе в свое время писал модуль для Delphi 7 для построения отчетов в Open Office Calc. Вчера, ради интереса, подправил модуль для работы в Lazarus. Конечно, не идеал, но идеологию "допилить напильником" ни кто не отменял)) Модуль использует OLE. Формат файлов xls и xlt(так как нужна была полная совместимость с MS Excel). Прилагается, маленький пример. Ну, и местами, есть комментарии.
Заставил методом "научного тыка" работать колонтитулы:
- Код: Выделить всё
procedure SetLeftColontitul(top:boolean;s:widestring);
procedure SetRightColontitul(top:boolean;s:widestring);
procedure SetCenterColontitul(top:boolean;s:widestring);
- Код: Выделить всё
procedure TOpenCalc.SetCenterColontitul(top: boolean; s: UTF8String);
var
oStyleFamilies,oPageFamilies,sPageStyle,oPageStyle,oHeaderLeft,
oHeaderText:variant;
d:unicodestring;
begin
oStyleFamilies:=document.getStyleFamilies;
oPageFamilies:=oStyleFamilies.getByName('PageStyles');
sPageStyle:=Sheet.PageStyle;
oPageStyle:=oPageFamilies.getByName(sPageStyle);
oPageStyle.HeaderOn:=true;
oPageStyle.HeaderIsShared:=true;
case top of
true:oHeaderLeft:=oPageStyle.RightPageHeaderContent;
false:oHeaderLeft:=oPageStyle.RightPageFooterContent;
end;
oHeaderText:=oHeaderLeft.getCenterText;
d:=utf8decode(s);
oHeaderText.SetString(variant(d));
case top of
true:oPageStyle.RightPageHeaderContent:=oHeaderLeft;
false:oPageStyle.RightPageFooterContent:=oHeaderLeft;
end;
oStyleFamilies:=Unassigned;
oPageFamilies:=Unassigned;
sPageStyle:=Unassigned;
oPageStyle:=Unassigned;
oHeaderLeft:=Unassigned;
oHeaderText:=Unassigned;
end;
procedure TOpenCalc.SetLeftColontitul(top: boolean; s: utf8string);
var
oStyleFamilies,oPageFamilies,sPageStyle,oPageStyle,oHeaderLeft,
oHeaderText:variant;
d:unicodestring;
begin
oStyleFamilies:=document.getStyleFamilies;
oPageFamilies:=oStyleFamilies.getByName('PageStyles');
sPageStyle:=Sheet.PageStyle;
oPageStyle:=oPageFamilies.getByName(sPageStyle);
oPageStyle.HeaderOn:=true;
oPageStyle.HeaderIsShared:=true;
case top of
true:oHeaderLeft:=oPageStyle.RightPageHeaderContent;
false:oHeaderLeft:=oPageStyle.RightPageFooterContent;
end;
oHeaderText:=oHeaderLeft.getLeftText;
d:=utf8decode(s);
oHeaderText.SetString(variant(d));
case top of
true:oPageStyle.RightPageHeaderContent:=oHeaderLeft;
false:oPageStyle.RightPageFooterContent:=oHeaderLeft;
end;
oStyleFamilies:=Unassigned;
oPageFamilies:=Unassigned;
sPageStyle:=Unassigned;
oPageStyle:=Unassigned;
oHeaderLeft:=Unassigned;
oHeaderText:=Unassigned;
end;
procedure TOpenCalc.SetRightColontitul(top: boolean; s: utf8string);
var
oStyleFamilies,oPageFamilies,sPageStyle,oPageStyle,oHeaderLeft,
oHeaderText:variant;
d:unicodestring;
begin
oStyleFamilies:=document.getStyleFamilies;
oPageFamilies:=oStyleFamilies.getByName('PageStyles');
sPageStyle:=Sheet.PageStyle;
oPageStyle:=oPageFamilies.getByName(sPageStyle);
oPageStyle.HeaderOn:=true;
oPageStyle.HeaderIsShared:=true;
case top of
true:oHeaderLeft:=oPageStyle.RightPageHeaderContent;
false:oHeaderLeft:=oPageStyle.RightPageFooterContent;
end;
oHeaderText:=oHeaderLeft.getRightText;
d:=utf8decode(s);
oHeaderText.SetString(variant(d));
case top of
true:oPageStyle.RightPageHeaderContent:=oHeaderLeft;
false:oPageStyle.RightPageFooterContent:=oHeaderLeft;
end;
oStyleFamilies:=Unassigned;
oPageFamilies:=Unassigned;
sPageStyle:=Unassigned;
oPageStyle:=Unassigned;
oHeaderLeft:=Unassigned;
oHeaderText:=Unassigned;
end;
Вообщем, если будет интересно и возникнут вопросы - спрашивайте.