Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2009, 10:43   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Выгрузка данных в таблицу опенофиса

Здраствуйте, подскажите как мне выгрузить данные из таблицы в табличный редактор опен оффиса?
Dozent вне форума Ответить с цитированием
Старый 16.10.2009, 12:03   #2
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

НАшёл хороший пример, но компилятор не пропускает

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComObj, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

//
   type
   TOpenOffice = class
      function Connect: boolean;
      procedure Disconnect;
      function CreateDocument: boolean;
      function OpenDocument(const aFileUrl:string): boolean;
      procedure SaveDocument(const aFileUrl:string);
      procedure InsertText(const aText: String);
   private
      StarOffice: Variant;
      Document: Variant;
      function MakePropertyValue(PropName, PropValue:string):variant;
   end;
implementation

{$R *.dfm}

function TOpenOffice.Connect: boolean;
begin
   if VarIsEmpty(StarOffice) then
      StarOffice := CreateOleObject('com.sun.star.ServiceManager');
   Result := not (VarIsEmpty(StarOffice) or VarIsNull(StarOffice));
end;



procedure TOpenOffice.Disconnect;
begin
   StarOffice := Unassigned;
end;



function TOpenOffice.CreateDocument: boolean;
var
   StarDesktop: Variant;
begin
   StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
   Document := StarDesktop.LoadComponentFromURL(
                  'private:factory/swriter', '_blank', 0,
                  VarArrayCreate([0, -1], varVariant));
   Result := not (VarIsEmpty(Document) or VarIsNull(Document));
end;

function TOpenOffice.MakePropertyValue(PropName, PropValue:string):variant;
var Struct: variant;
begin
    Struct := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
    Struct.Name := PropName;
    Struct.Value := PropValue;
    Result := Struct;
end;

function TOpenOffice.OpenDocument(const aFileUrl:string): boolean;
var
   StarDesktop: Variant;
   VariantArr: variant;
begin
   StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');
   VariantArr := VarArrayCreate([0, 0], varVariant);
   VariantArr[0] := MakePropertyValue('FilterName', 'HTML (StarWriter)');
   Document := StarDesktop.LoadComponentFromURL(
                  aFileUrl, '_blank', 0,
                  VariantArr);
   Result := not (VarIsEmpty(Document) or VarIsNull(Document));
end;


procedure TOpenOffice.SaveDocument(const aFileUrl:string);
var
   StarDesktop: Variant;
   VariantArr: variant;
begin
   StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
   VariantArr := VarArrayCreate([0, 0], varVariant);
   VariantArr[0] := MakePropertyValue('FilterName', 'MS Word 97');
//VariantArr[0] := MakePropertyValue('FilterName', 'Rich Text Format'); åñëè êîìó-òî ïîíàäîáèòñÿ ;-)
   Document.StoreToURL(aFileUrl, VariantArr);
end;

procedure TOpenOffice.InsertText(const aText: String);
var
   oCursor: Variant;
   oText: Variant;
begin
//get document text object
   oText := Document.GetText;
//create cursor
   oCursor := oText.CreateTextCursor;
//set some text properties
   oCursor.SetPropertyValue('CharColor', 255);
   oCursor.SetPropertyValue('CharShadowed', True);
//insert string
   oText.InsertString(oCursor, aText, false);
//insert line break character
   oText.InsertControlCharacter(oCursor, 0, false);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 InsertText('123');// ГОВОРИТ ИДЕНТИФЕКАТОР НЕ НАЙДЕН
end;

end.
Dozent вне форума Ответить с цитированием
Старый 17.10.2009, 04:02   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

обратите внимание, что в программе ДВА КЛАССА:
стандартный TFORM1
и класс, описывающий работу с OpenOffice: TOpenOffice

т.е. вызвать процедуру несложно,
достаточно написать так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 TOpenOffice.InsertText('123');
end;
и компилятор пропустит...
Только работать это не будет - получите при нажатии на кнопку Access Violation...


чтобы работало, надо завести переменную класса TOpenOffice
создать экземляр, проиницилизировать (метод Connect)
потом вызвать создание документа (метод CreateDocument)
а вот уже потом можно и InsertText вызывать...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка данных (пересчет возможных вариантов комбинаций, перенос данных в таблицу) Vitalik85 Microsoft Office Excel 4 12.08.2009 00:30
Выгрузка данных БД в другую таблицу Mouse123 БД в Delphi 4 12.05.2009 12:38
TXMLTransformProvider выгрузка данных в хмл MAcK Общие вопросы Delphi 1 15.04.2009 22:00
занесение данных в таблицу ASAN Microsoft Office Excel 7 02.06.2008 23:50
Выгрузка данных в ComboBox через ZQuery barcelona БД в Delphi 1 08.05.2007 03:35