2

私は次のことに苦労しています:

目標は、openoffice の自動化サーバーをパラメーター化することであり、私は Delphi でプログラミングしています。

Delphi コードに変換したい基本的なコードは次のとおりです。

Dim aProps(1) As New com.sun.star.beans.PropertyValue
aProps(0).Name = "FilterName"
aProps(0).Value = "Text - txt - csv (StarCalc)"
aProps(1).Name = "FilterOptions"
aProps(1).Value = sFilterOptions

Delphiでの私の試みは次のようになります

type TPrmRecord = packed Record  
                    Name : String;  
                    Value : String;  
                  End;

Var
  ooParams:Variant;
  MyData : TPrmRecord;
Begin
  ooParams:= VarArrayCreate([0, 1], varVariant);

  MyData.Name  := 'FilterName';
  MyData.Value := 'Text - txt - csv (StarCalc)';
  ooParams[0]  := MyData; 

  MyData.Name  := 'FilterOptions';
  MyData.Value := '59/44,34,ANSI,1,';
  ooParams[1]  := MyData;
End;

これは機能していません 誰かがこれに取り組む方法を提案していますか?

4

5 に答える 5

3

あなたのTPrmRecordタイプは OO.org が期待するものではありません。独自の型を書こうとするのではなく、OO.org が公開しているものを使用してください。

Delphi 用の LPGL ライセンス ツールボックスがあります: Delphi OOo。その中に、関数をエクスポートするユニット OOoTools.pas がありますCreateUnoStruct()'com.sun.star.beans.PropertyValue'これを使用して、構造体の名前として渡し ます。(または他のパラメーター値に応じてそれらの配列)を取得し、Variant代わりに使用できますTPrmRecord(次のようなもの、未テスト):

var
  Params: Variant;
begin
  Params := CreateUnoStruct('com.sun.star.beans.PropertyValue', 1);

  Params[0].Name  := 'FilterName';
  Params[0].Value := 'Text - txt - csv (StarCalc)';

  Params[1].Name  := 'FilterOptions';
  Params[1].Value := '59/44,34,ANSI,1,';
end;
于 2009-11-20T11:11:31.453 に答える
1

COMクラスの作成が欠落しているように見えます。これはNew com.sun.star.beans.PropertyValue、コードの行に相当します。

タイプライブラリをDelphiにインポートする必要があると思います。これにより、基本的な動作をエミュレートするために必要なオブジェクト、プロパティ、およびメソッドが提供されます。

于 2009-11-20T10:42:32.707 に答える
1

以下は、Delphi OOo を使用しない直接の Delphi コードです。

uses comobj;

var
  OO_ServiceManager: OleVariant;
  FileParams: OleVariant;

begin
  OO_ServiceManager := CreateOleObject ('com.sun.star.ServiceManager');
  FileParams := VarArrayCreate([0, 1], varVariant);
  FileParams[0] := OO_ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  FileParams[0].Name := 'FilterName';
  FileParams[0].Value := 'Text - txt - csv (StarCalc)';
  FileParams[1] := OO_ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  FileParams[1].Name := 'FilterOptions';
  FileParams[1].Value := '59/44,34,ANSI,1,';
end;
于 2012-08-29T08:00:18.217 に答える
0

ドイツの Delphi- PRAXiSフォーラム のこのスレッドをご覧ください。いくつかの OOo 自動化を行っている投稿された delphi ユニット全体があります。

于 2009-11-20T11:06:28.637 に答える
-1

使用する

var
ooParams:array[0..1] of TPrmRecord;

delphi は厳密な型キャストを使用するため、割り当てエラーが発生しています。

于 2009-11-20T11:16:10.640 に答える