Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi OpenOffice-Automation - Datenquelle für Serienbrief erstelle (https://www.delphipraxis.net/143499-openoffice-automation-datenquelle-fuer-serienbrief-erstelle.html)

Dummbatz 17. Nov 2009 08:56


OpenOffice-Automation - Datenquelle für Serienbrief erstelle
 
Hallo zusammen!

Ich bin gerade dabei mit meiner Anwendung OpenOffice zu automatisieren. Bisher klappt alles ganz gut.
Jetzt versuche ich mich an Serienbriefen mit CSV-Dateien als Datenquelle. Diese muss ich in OO als Datenbank anlegen damit sie für den Serienbrief verfügbar sind.

Dazu habe ich ein Beispiel im OOo-Forum gefunden und versucht es nach Delphi zu übersetzen:

Delphi-Quellcode:
var
  fOpenOffice, wDBContext, WDSource, wStruct, wMailMerge: variant;
  wPropertyValue: Variant;


fOpenOffice := CreateOleObject('com.sun.star.ServiceManager');
wDBContext := fOpenOffice.createInstance('com.sun.star.sdb.DatabaseContext');
wDSource := wDBContext.GetByName('file://c:/personen.csv');

wPropertyValue := VarArrayCreate([0, 5], varVariant);
wPropertyValue[0] := IMakePropertyValue('Extension', 'csv');
wPropertyValue[1] := IMakePropertyValue('HeaderLine', true);
wPropertyValue[2] := IMakePropertyValue('FieldDelimiter', ';');
wPropertyValue[3] := IMakePropertyValue('StringDelimiter', '');
wPropertyValue[4] := IMakePropertyValue('DecimalDelimiter', ',');
wPropertyValue[5] := IMakePropertyValue('ThousandDelimiter', '.');

wDSource.setPropertyValue('URL', 'sdbc:flat:file://c:/personen.csv');
wDSource.setPropertyValue('Info', wPropertyValue); // <-- Hier knallt es

wDSource.DatabaseDocument.storeAsURL('file://c:/personen.odb'), VarArrayCreate([0, -1], varVariant));

wDBContext.registerObject('my-personen', wDSource);
In der kommentierten Zeile knallt es, ich bekomme hier eine "com.sun.star.lang.IllegalArgumentException".

Hat jemand eine Idee wieso es knallt und was ich dagegen tun kann? Vielleicht ein funktionierendes Beispiel (Link)?

MfG Thomas.

ToFaceTeKilla 17. Nov 2009 10:25

Re: OpenOffice-Automation - Datenquelle für Serienbrief erst
 
Kann es sein, dass es hier
Delphi-Quellcode:
wDSource.setPropertyValue('URL', 'sdbc:flat:file://c:/personen.csv');
knallt und nicht hier
Delphi-Quellcode:
wDSource.setPropertyValue('Info', wPropertyValue); // <-- Hier knallt es
?

Weil wenn ich mir das hier anschaue, muss man URLs mit drei '///' angeben...


EDIT: Zeilen vertauscht :roll: wenn dann, knallt es ja vor der Zeile, an der der Compiler steht...

Dummbatz 17. Nov 2009 10:45

Re: OpenOffice-Automation - Datenquelle für Serienbrief erst
 
Zitat:

Zitat von ToFaceTeKilla
Kann es sein, dass es hier [...] knallt und nicht hier [...]?

Du hast recht, URLs werden mit drei "/" geschrieben. Das ist ein Fehler beim Posten meines Beitrages gewesen. Im Programm ist es korrekt, das stellt eine function sicher.

Es knallt aber tatsächlich in der gekennzeichneten Zeile, zumindest knallt es wenn ich diese im Debugger ausführe.

MfG Thomas.

ToFaceTeKilla 17. Nov 2009 12:20

Re: OpenOffice-Automation - Datenquelle für Serienbrief erst
 
Erwartet die setPropertyValue-Methode evtl. noch irgendwelche zusätzlichen Parameter oder so? Ich könnte mir vorstellen, dass z.B. das Array nicht automatisch zerpflückt wird, sondern dass du ihm das einzeln übergeben musst.
In etwa so:
Delphi-Quellcode:
wDSource.setPropertyValue('Info', wPropertyValue[0], wPropertyValue[1]...)

Disclaimer:
Nur Vermutungen. Ich maße es mir an, zu antworten, weil ich auch schonmal bisschen mit OO-Automation rumgepfuscht habe, mehr jedoch nicht.

Dummbatz 17. Nov 2009 15:05

Re: OpenOffice-Automation - Datenquelle für Serienbrief erst
 
Zitat:

Zitat von ToFaceTeKilla
Ich könnte mir vorstellen, dass z.B. das Array nicht automatisch zerpflückt wird, sondern dass du ihm das einzeln übergeben musst.

Knallt an der selben Stelle, nur bekomme ich eine andere Meldung:
"[automation bridge] unexpected exception in UnoConversionUtilities <T>::variantToAny !"

Das wars also auch nicht.

MfG Thomas.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz