Frage

Ich bin mit dem folgenden kämpfen:

Das Ziel ist es, einen Automatisierungsserver für Openoffice parametrisieren und ich bin Programmierung in Delphi.

Das Stück des Basiscode ich in Delphi-Code zu übersetzen ist:

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

Mein Versuch in Delphi sieht aus wie

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;

Dies ist nicht funktioniert hat jemand einen Vorschlag, wie man das angehen?

War es hilfreich?

Lösung

Ihr TPrmRecord Typ ist nicht das, was OO.org erwartet. Sie sollten nicht versuchen, Ihre eigene Art zu schreiben, aber verwenden diejenigen, die OO.org aussetzt.

Es gibt eine LPGL lizenzierte Toolbox für Delphi: Delphi OOo . Darin finden Sie eine Einheit OOoTools.pas finden, die eine Funktion CreateUnoStruct() exportiert. Verwenden Sie diese und 'com.sun.star.beans.PropertyValue' wie der Name der Struktur übergeben. Sie erhalten eine Variant (oder ein Array von denen, je nach dem anderen Parameterwert) zurück, dass Sie anstelle von TPrmRecord verwenden können (so etwas wie die folgenden, nicht getestet):

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;

Andere Tipps

Es sieht aus, als ob Sie die Erstellung der COM-Klasse fehlen, die das Äquivalent der New com.sun.star.beans.PropertyValue Zeile im Code sein würden.

Ich vermute, Sie benötigen die Typbibliothek in Delphi importieren, die Sie würde die Objekte, Eigenschaften und Methoden, die Sie das grundlegende Verhalten emulieren müssen.

Hier ist gerade Delphi-Code ohne Verwendung von Delphi OOo:

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;

Hier finden Sie aktuelle dieses Thema in dem Deutsch Delphi-PRAXiS Foren . Es gibt eine ganze delphi Einheit dabei einige OOo Automatisierung geschrieben.

Verwendung

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

delphi verwendet strengen Typguss, so dass dies einen Zuordnungsfehler verursacht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top