
21.12.2014, 01:17
|
 |
Прохожий
|
|
Регистрация: 23.08.2011
Адрес: МО
Сообщения: 46
Версия Delphi: Delphi, Lazarus
Репутация: 10
|
|
Работа с OpenOffice
Всем привет!
Наткнулся на статью описывающую работу с OpenOffice ...
Вот ссылочка - http://edusupport.ru/?statya=113
Решил поковырять эту тему, имеется прожка в которой реализована передача данных из таблицы БД в EXCEL по нажатию кнопки. Решил расширить функционал и добавить ещё одну кнопку реализующую экспорт в электронную таблицу OpenOffice.
И буквально на первых шагах столкнулся с проблемой на этапе создания документа при попытке его запустить вылетает ошибка Invalid variant operation.
Вот код:
Код:
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls, DBCtrls, DB, DBGrids, DBTables, ADODB,
Vcl.Buttons, Vcl.OleCtnrs, ComObj, ActiveX;
type
TOpenOffice = class
function Connect: boolean;
function MakePropertyValue(PropertyName, PropertyValue:string):variant;
function CreateDocument: boolean;
end;
type
TForm6 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;
BitBtn7: TBitBtn;
BitBtn8: TBitBtn;
BitBtn9: TBitBtn;
BitBtn10: TBitBtn;
BitBtn11: TBitBtn;
BitBtn13: TBitBtn;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
procedure BitBtn8Click(Sender: TObject);
procedure BitBtn9Click(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure BitBtn11Click(Sender: TObject);
procedure BitBtn10Click(Sender: TObject);
procedure BitBtn13Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
i:integer;
i1,j,index: Integer;
ExcelApp,sheet: Variant;
OO: Variant;
Sheets, Cell : Variant;
Desktop: Variant;
Document: Variant;
implementation
{$R *.dfm}
//Подключамся к серверу автоматизации
function TOpenOffice.Connect: boolean;
begin
if VarIsEmpty(OO) then
OO := CreateOleObject('com.sun.star.ServiceManager');
Result := not (VarIsEmpty(OO) or VarIsNull(OO));
end;
//Создаём документ
function TOpenOffice.CreateDocument: boolean;
begin
Desktop := OO.createInstance('com.sun.star.frame.Desktop');
Document := Desktop.LoadComponentFromURL('private:factory/scalc', '_blank', 0,VarArrayCreate([0, -1], varVariant));
Result := not (VarIsEmpty(Document) or VarIsNull(Document));
Sheets := Document.GetSheets;
//Добавляем Книгу с именем Export
Sheet := Sheets.getByName('Export');
//Делаем документ не видимым
OO.Visible := false;
end;
//Функция эта вспомогательная, она просто ставить заданное значение в соответствие заданному свойству.
function TOpenOffice.MakePropertyValue(PropertyName, PropertyValue:string):variant;
var
Structure: variant;
begin
Structure := OO.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
Structure.Name := PropertyName;
Structure.Value := PropertyValue;
Result := Structure;
end;
procedure TForm6.Button1Click(Sender: TObject);
begin
OO.Visible := true;
end;
вылетает ошибка Invalid variant operation
Где накосячил ?
|