Wie OpenOffice / Excel Sheet befüllen?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Wie OpenOffice / Excel Sheet befüllen?

Beitrag 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."
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Wie OpenOffice / Excel Sheet befüllen?

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Wie OpenOffice / Excel Sheet befüllen?

Beitrag 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
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Wie OpenOffice / Excel Sheet befüllen?

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Wie OpenOffice / Excel Sheet befüllen?

Beitrag 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?
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Wie OpenOffice / Excel Sheet befüllen?

Beitrag 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:)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Wie OpenOffice / Excel Sheet befüllen?

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten