если кому будет интересно:
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;
 
 
Вообщем, если будет интересно и возникнут вопросы - спрашивайте.