Aus PB Excel-Datei mit mehreren Tabellenblättern erstellen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Habe den Fehler im ersten Beispiel noch nicht untersucht.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
schic
Beiträge: 68
Registriert: 25.12.2004 19:04

Beitrag von schic »

was genau hakelt an der Zeile

Code: Alles auswählen


pxlSheets.IDispatch = SetComObj(pXlBookThatWasOpened, "Worksheets", 0) 
fehlt´s schon am GetIDsOfNames, dann müßte schon vorher bei invoke
für pXlBookThatWasOpened ein Fehler ausgegeben werden
-> hr Invoke: irgendein Minuswert.

Wo genau kommt der erste Fehler?
Wenn die Arbeitsmappe garnicht angezeigt wird, ist der Fehler schon
ganz am Anfang beim Öffnen oder noch früher.
Dann müßten lauter "hr Invoke: -xyz..." ausgegeben werden
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Betrifft: letztes gepostetes Beispiel

Hier die Fehlermeldung:

die Arbeitsmappe wird nicht angezeigt.
Zuletzt geändert von dysti am 23.01.2007 09:41, insgesamt 1-mal geändert.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Er hat Schwierigkeiten mit dem öffnen de Exeldatei.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
schic
Beiträge: 68
Registriert: 25.12.2004 19:04

Beitrag von schic »

es handelt sich wohl um den Fehler EXCEPTION_ACCESS_VIOLATION
-> http://support.microsoft.com/kb/101774/en-us

Hilft aber so auch nicht weiter. Habe erst mal auch keine Idee...
Teste mal in der Procedure.l AutoWrap

Code: Alles auswählen

hr = *pDisp\Invoke(dispID, IID_NULL, #CLSCTX_ALL, autoTyp, @dp, @pvResult, @Exception, #Null)
statt

Code: Alles auswählen

hr = *pDisp\Invoke(dispID, IID_NULL, #LOCALE_SYSTEM_DEFAULT, autoTyp, @dp, @pvResult, @Exception, #Null)
Glaube aber nicht, daß es daran liegt :?
schic
Beiträge: 68
Registriert: 25.12.2004 19:04

Beitrag von schic »

die DispId von Open für das Workbooks-Objekt müsste 1923 sein.
Bei Dir zeigt´s 682 an. Scheint Du hast Open von einem anderen Objekt
verwendet. Könnte aber evtl. auch an unterschiedlichen Excel-Versionen
liegen. Weiß nicht ob die IDs auf jedem System gleich sind oder
variabel vergeben werden.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Also, ich habe eine ganz große Bitte an die Forum-Mitglieder mit Exel auf dem Rechner:
Könntet ihr das letzte Beispiel mal in eurer PB-IDE laden und ausprobieren.
Dazu müßt ihr allerdings auch den Wrapper auf Seite 2 mit einfügen.

Wie läuft es bei Euch. Wenn es läuft, könntet ihr dann mal die Exelversion mitteilen, z.B. Exel2000, evtl. PB-Version.
Vielleicht kommen wir so den Fehler auf der Spur.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Hallo ,
wie gut, das PB auch auf einem USB-Stick läuft.
Bei Kumpels auf den Rechnern probiert.
Und jetzt kommt der Hammer:
Erstmal die gute Nachricht: das Beispiel läuft.
Die schlechte Nachricht: das Beispiel läuft nicht.
Jetzt wird der Hund in der Pfanne verrückt.

Also, das Beispiel mit PB 4.02 laufen gelassen.
Ergebnis: Fehler

das Beispiel unter 4.0 laufen lassen.
Ergebnis: es läuft

@schic: wieso läuft es unter 4.02 nicht?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

@schic: wenn man ein Datum in Exel einträgt in der Form "21.04.07", dann formatiert Exel automatisch die Zelle. Man bekommt keine Standardformatierung der Zelle mit diesem Inhalt.
Es steht dieser Wert nun in dieser Zelle. Keine der beiden Funktionen liest den Inhalt, bzw. zeigt ihn an. Datumwerte sind nun aber üblich in einer Exeltabelle.
Wie bekommt man jetzt das Datum ausgelesen. Aber weiß man vorher, ob ein Datum dort drin steht?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
schic
Beiträge: 68
Registriert: 25.12.2004 19:04

Beitrag von schic »

zu dem Datum auslesen kann ich Dir helfen.
Füge in Die Procedure XLGetCellsValue bei Select pvResult\vt

Code: Alles auswählen

    
Case #VT_DATE
      #VARIANT_NOUSEROVERRIDE = 4
      hr = VariantChangeType_(pvResult, pvResult, #VARIANT_NOUSEROVERRIDE, #VT_BSTR)
      If Not hr = #S_OK
        Debug "error VariantChangeType_ hr: " + Str(hr)
      EndIf
      tmpText$ = Uni2Ansi(pvResult\bstrVal)
      result = @tmpText$
ein, dann bekommst Du ein schön formatiertes Datum in Textformat.
Siehe hierzu und für weiterführende Informationen
http://msdn2.microsoft.com/en-gb/library/ms221634.aspx

Warum der Code unter PB 4.02 nicht läuft weiß ich nicht :?
Ein Bug im Code oder in PB oder ...

Hat jemand eine Idee dazu, oder wie man das Problem eingrenzen könnte?
Antworten