Seite 2 von 2

Re: Wie OpenOffice / Excel Sheet befüllen?

Verfasst: 24.10.2015 22:26
von Shardik
Ich habe das 2.Beispiel von Romel jetzt einmal selbst unter Windows 7 x64 SP1 getestet und es läuft einwandfrei:
- es startet LibreOffice 3.3 und öffnet ein neues Tabellenblatt
- es schreibt in Zelle A3 die Zeichenkette "Hello World !"
- es erstellt das neue Verzeichnis C:\temp
- es speichert das Tabellenblatt test.xls im Verzeichnis C:\temp ab

Danach kann ich die Datei C:\temp\test.xls einwandfrei öffnen.

Folgende Anpassungen mußte ich vornehmen:
- Ich habe als erste Zeile ein IncludePath "MeinPfadZumCOMatePLUSVerzeichnis" eingefügt
- Ich mußte in romels Beispiel in der 3.Zeile die Endung von VariantHelper_Include von "pbi" in "pb" abändern
- Bei Verwendung von PB 5.40 x64 bekam ich folgende Fehlermeldung:
POLINK: error: Unresolved external symbol '_SafeArrayGetVartype@8'.
POLINK: fatal error: 1 unresolved external(s).
- Ich habe daher in den Compiler-Optionen einfach die 32-Bit Version des Compilers ("PureBasic 5.40 LTS (Windows - x86)" ausgewählt. Danach lief romels Beispielprogramm problemlos wie oben beschrieben. Meine Version von COMatePLUS: "Version 1.2 released 09th July 2010."

Re: Wie OpenOffice / Excel Sheet befüllen?

Verfasst: 24.10.2015 22:48
von ts-soft
Shardik hat geschrieben:- Bei Verwendung von PB 5.40 x64 bekam ich folgende Fehlermeldung:
POLINK: error: Unresolved external symbol '_SafeArrayGetVartype@8'.
POLINK: fatal error: 1 unresolved external(s).

Code: Alles auswählen

Import "oleaut32.lib" 
  SafeArrayAllocDescriptorEx(a.i, b.i, c.i); As "_SafeArrayAllocDescriptorEx@12" 
  SafeArrayGetVartype(a.i, b.i); As "_SafeArrayGetVartype@8" 
EndImport 
Gruß
Thomas

Re: Wie OpenOffice / Excel Sheet befüllen?

Verfasst: 25.10.2015 00:20
von Kurzer
@Shardik: Hmm, dann nutzt Du vermutlich ein anderes COMatePLUS oder es liegt an was völlig anderem.

Ich habe meinen gesamten Test jetzt mal als Screenvideo aufgenommen inkl. runterladen der ZIP Datei und den ganzen Korrekturen, die nötig sind, bis es unter 5.40 kompiliert.

Am Ende lege ich einen Breakpoint an die betreffende Stelle und man erkennt, dass er den gesamten IF Block überspringt.

Dummerweise hatte ich die Option zum Aufzeichnen des Mauszeigers nicht aktiviert, ich denke aber man kann dem ganzen trotzdem folgen. Aus Datenschutzgründen habe ich außerdem einige Bereiche ausgegraut.

https://vid.me/XGt6

Prüf doch bitte mal, ob das ganze mit dieser Version von COMatePLUS bei Dir auch noch geht.
Besten Dank.

Gruß Kurzer

Re: Wie OpenOffice / Excel Sheet befüllen?

Verfasst: 25.10.2015 00:35
von ts-soft
Die aktuellste und von mir gefixte Version gibts immer noch hier:
https://dl.dropboxusercontent.com/u/308 ... tePLUS.pbi

und den Varianthelper gibt es hier:
https://dl.dropboxusercontent.com/u/308 ... Include.pb

Als Resident Datei kann die Original-Datei genommen werden, bzw. hier:
https://dl.dropboxusercontent.com/u/308 ... idents.pbi

Sollten keinerlei Probleme bei auftauchen! Hab den OpenOffice und Excel kram aber nicht
extra getested, da mir beide Programme nicht vorliegen (nutze Softmaker Office).

PS: Es wird langsam Zeit, das dieser Thread mal verschoben wird, was hat der unter
Code, Tipps und Tricks verloren? :mrgreen:

Gruß
Thomas

Re: Wie OpenOffice / Excel Sheet befüllen?

Verfasst: 25.10.2015 09:24
von Shardik
Hallo Kurzer,

vielen Dank, dass Du Dir die Mühe gemacht hast, alles in einem Video Schritt für Schritt zu dokumentieren. Ich habe daher jeden Schritt in Deinem Video nachvollzogen (bis auf die Verzeichnisstrukturen... :wink:), und bei mir läuft am Ende mit PB 5.40 x86 (und nach Eintragen der von ts-soft vorgeschlagenen Änderung des Import-Blocks in der VariantHelper_Include.pb auch mit PB 5.40 x64) alles einwandfrei. Bei mir wird das Objekt "com.sun.star.frame.Desktop" korrekt initialisiert und daher - im Gegensatz zu Dir - der If-Zweig durchlaufen.

Deshalb kann es eigentlich nur an Deiner Installation von OpenOffice/LibreOffice liegen. Startest Du vielleicht OpenOffice nur von einem Memorystick? Wenn Du OpenOffice/LibreOffice korrekt auf Deinem System installiert und die Software korrekt in der Registry eingetragen ist, welche Version verwendest Du? Und mit welcher Windows-Version arbeitest Du?

Re: Wie OpenOffice / Excel Sheet befüllen?

Verfasst: 25.10.2015 18:21
von Kurzer
@ts-soft: Danke für die links. Bei diesen Versionen kann ich fehlerfrei durchkompilieren, ohne dass ich was am Source anpassen muss. :allright:
Code, Tipps und Tricks? Habe ich meinen Post ursprünglich hier eröffnet? :shock: :oops: Sorry, das müsste natürlich eher nach Allgemein oder Windows. War keine Absicht... ich bin die letzten Monate aufgrund privater Umstände ziemlich "durch", das schlägt so langsam negativ aufs Denkvermögen. :freak:

@Shardik: Ich habe es jetzt mit der aktuellen Version von ts-soft probiert.
Abgesehen davon, dass ich an COMatePLUS nichts korrigieren muss, wird das Objekt trotzdem nicht initialisiert. Eine Prüfung innerhalb der Prozedur "COMate_CreateObject" schlägt fehl:

Code: Alles auswählen

If hWnd = 0 ;No ActiveX control to house.
          ;Get classID from the registry.
            If Left(progID$, 1) = "{"
              hResult = CLSIDFromString_(progID, @clsid)
              If SUCCEEDED(hResult)
                hResult = ProgIDFromCLSID_(clsid, @iDisp)
                If SUCCEEDED(hResult) And iDIsp
                  SysFreeString_(iDisp)
                EndIf
              EndIf
            Else
	  	        hResult = CLSIDFromProgID_(progID$, @clsid);
	          EndIf
HIER -->   If SUCCEEDED(hResult)
            hResult = CoGetClassObject_(clsid, #CLSCTX_LOCAL_SERVER|#CLSCTX_INPROC_SERVER, 0, ?IID_IClassFactory, @cf)
	          If SUCCEEDED(hResult)
[...]
Und zwar gibt "hResult = CLSIDFromProgID_(progID$, @clsid);" den Wert -2147221005 zurück, was von der nachfolgenden Prüfung "If SUCCEEDED(hResult)" als nicht erfolgreich eingestuft wird. Der IF Block wird darauf hin nicht ausgeführt.

ProgID$ enthält "com.sun.star.ServiceManager".
@clsid zeigt nach Durchlauf von "CLSIDFromProgID_" auf eine clsid Struktur, in der jedes Element mit 0 gefüllt ist. Die CLSID wurde also nicht gefunden. Das ist jetzt auch nicht so mein Spezialgebiet - müsste die ProgID mit RegEdit.exe irgendwo in der Regesitry zu finden sein?

Zu OpenOffice:
Ich nutze OpenOffice 4.1.1 in der portablen Version. Es wurde von portableapps.com portable gemacht. Soweit mir bekannt ist, arbeitet der Launcher von portableapps.com so, dass das Programm (also OpenOffice) während der Laufzeit wie ein normal installiertes Programm im System und der Registry eingebettet ist. Erst, wenn man OpenOffice schließt werden die zugehörigen Registry-Einträge und Systemdateien gesichert und dann aus der Registry und den Systemverzeichnissen entfernt.

Mein Windows System ist XP mit SP3 (Ja, ich weiß, ich bin Nostalgiker :wink:)

Re: Wie OpenOffice / Excel Sheet befüllen?

Verfasst: 28.10.2015 21:42
von Falko
Ich habe die COMatePlus.pbi für PB5.40LTS nun, nach Info von Kiffi, korrigiert.
Bei mir läuft jetzt alles, wieder wie zuvor.

Folgedessen müssen alle (3) Einträge mit:
hResult = CLSIDFromProgID_(progID$, @clsid)
auf:
hResult = CLSIDFromProgID_(progID, @clsid)
in der Lib umgeändert werden. Vielleicht funktioniert dann der Code bei dir auch, auch wenns nicht direkt über Excel ist.

Gruß,
Falko