ExcelWriter (MS-Excel '97 kompatible files erzeugen)
Hallo ABBKlaus,
wieso kann ich als Integerwerte eigentlich nur Words schreiben? Longs kann doch der Excelmann auch darstellen.
Noch was:
Excel 2003 meint, dass die mit der PB4-Lib erstellte Datei im Excel-2.1-Format vorliegt?
Gruß Karl
wieso kann ich als Integerwerte eigentlich nur Words schreiben? Longs kann doch der Excelmann auch darstellen.
Noch was:
Excel 2003 meint, dass die mit der PB4-Lib erstellte Datei im Excel-2.1-Format vorliegt?
Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
PB 5.X
Hallo Karl,
du hast völlig recht
Habs fälschlicherweise mal als Excel-97 Format bezeichnet
Und wohl auch wegen des alters dieses Formats ist ein Integer-Wert wohl auch nur 16-Bit gross :
MfG Klaus
du hast völlig recht

Habs fälschlicherweise mal als Excel-97 Format bezeichnet

Und wohl auch wegen des alters dieses Formats ist ein Integer-Wert wohl auch nur 16-Bit gross :
http://sc.openoffice.org/excelfileformat.pdf6.56 INTEGER
BIFF2 BIFF3 BIFF4S BIFF4W BIFF5 BIFF7 BIFF8 BIFF8X
0002H — — — — — — —
This record represents a cell that contains an unsigned 16-bit integer value. If a value cannot be stored as a 16-bit
integer, a NUMBER record (-> 6.68) must be written. From BIFF3 on this record is replaced by the RK record (-> 6.82).
Record INTEGER, BIFF2:
Offset Size Contents
0 2 Index to row
2 2 Index to column
4 3 Cell attributes (-> 3.12)
7 2 Unsigned 16-bit integer value
MfG Klaus
PureBasicPower TailBite Printer_Lib / PDFBarcode / PrintBarcode / ExcelWriter
Darf man denn irgendwann auf Unterstützung eines annähernd
aktuellen Excel-Formats hoffen ? Oder muss ich auch in Zukunft
weiterhin mit Excel rumtricksen (*) damit ich damit meine Daten
verexcelt darstellen kann?
(*) PB-Daten -> Excel Ich erstelle meine Daten in Tabellenform. Ins
ExcelFormat speichere ich die indem ich eine VorlagenDatei mit
entsprechenden Makros öffne. Diese Makros erledigen den Rest wie
Öffnen der Quelldatei (Meist ein CSVFormat (im Gegensatz zur
Dokumentation unterstützt mein Excel das Öffnen einer solchen Datei
nur dann korrekt wenn da als Trennzeichen ein TAB benutzt wird))
Formatierung, Speicherung in einem "anständigen" Format , u.s.w.
Es macht sogar Spaß diese Makros zu erstellen.
aktuellen Excel-Formats hoffen ? Oder muss ich auch in Zukunft
weiterhin mit Excel rumtricksen (*) damit ich damit meine Daten
verexcelt darstellen kann?
(*) PB-Daten -> Excel Ich erstelle meine Daten in Tabellenform. Ins
ExcelFormat speichere ich die indem ich eine VorlagenDatei mit
entsprechenden Makros öffne. Diese Makros erledigen den Rest wie
Öffnen der Quelldatei (Meist ein CSVFormat (im Gegensatz zur
Dokumentation unterstützt mein Excel das Öffnen einer solchen Datei
nur dann korrekt wenn da als Trennzeichen ein TAB benutzt wird))
Formatierung, Speicherung in einem "anständigen" Format , u.s.w.
Es macht sogar Spaß diese Makros zu erstellen.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
@bobobo: im moment hab Ich das nicht geplant (aus zeitgründen).
Ich weiss auch nicht ob das oben genannte PDF ausreicht um damit eine Aktuellere version (BIFF5 ist wohl Excel 97) zu proggen ?
MfG Klaus
Ich weiss auch nicht ob das oben genannte PDF ausreicht um damit eine Aktuellere version (BIFF5 ist wohl Excel 97) zu proggen ?
MfG Klaus
PureBasicPower TailBite Printer_Lib / PDFBarcode / PrintBarcode / ExcelWriter
- Falko
- Admin
- Beiträge: 3535
- 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:
Könntest du dieses auch für PB 4.10 anpassen?ts-soft hat geschrieben:Mit der XLTable.dll von Edwin Knoppert kann man die Excel-Dateien dann auch lesen! Nur schreiben ist doch![]()
Die DLL gibt unter: http://www.hellobasic.com/download/xltable.zip
Eine Include für PB4:Wenn man jetzt eins von beiden an dieselbe PB-Version anpaßt, ergänzenCode: Alles auswählen
#xlAddIn = $00000012 #xlCSV = $00000006 #xlCSVMac = $00000016 #xlCSVMSDOS = $00000018 #xlCSVWindows = $00000017 #xlDBF2 = $00000007 #xlDBF3 = $00000008 #xlDBF4 = $0000000B #xlDIF = $00000009 #xlExcel2 = $00000010 #xlExcel2FarEast = $0000001B #xlExcel3 = $0000001D #xlExcel4 = $00000021 #xlExcel5 = $00000027 #xlExcel7 = $00000027 #xlExcel9795 = $0000002B #xlExcel4Workbook = $00000023 #xlIntlAddIn = $0000001A #xlIntlMacro = $00000019 #xlWorkbookNormal = $FFFFEFD1 #xlSYLK = $00000002 #xlTemplate = $00000011 #xlCurrentPlatformText = $FFFFEFC2 #xlTextMac = $00000013 #xlTextMSDOS = $00000015 #xlTextPrinter = $00000024 #xlTextWindows = $00000014 #xlWJ2WD1 = $0000000E #xlWK1 = $00000005 #xlWK1ALL = $0000001F #xlWK1FMT = $0000001E #xlWK3 = $0000000F #xlWK4 = $00000026 #xlWK3FM3 = $00000020 #xlWKS = $00000004 #xlWorks2FarEast = $0000001C #xlWQ1 = $00000022 #xlWJ3 = $00000028 #xlWJ3FJ3 = $00000029 #xlUnicodeText = $0000002A #xlHtml = $0000002C #xlWebArchive = $0000002D #xlXMLSpreadsheet = $0000002E ; ;=================================== ; Excel object ;=================================== ; Prototype.l Excel_FileToObject(szFileName.s) Prototype.l Excel_Destroy(hObject.l) Prototype.l Excel_GetSheetCount(hObject.l) Prototype.l Excel_GetSheetName(hObject.l, nSheet.l) ; ;=================================== ; XLTable ;=================================== ; Prototype.l Excel_SheetToXLTable(hObject.l, nSheet.l) Prototype.l Excel_XLTable_GetMaxCols(hXLTable.l) Prototype.l Excel_XLTable_GetMaxRows(hXLTable.l) Prototype.l Excel_XLTable_CellIsValue(hXLTable.l, nCol.l, nRow.l) Prototype.l Excel_XLTable_GetCellAsString(hXLTable.l, nCol.l, nRow.l) Prototype.d Excel_XLTable_GetCellAsValue(hXLTable.l, nCol.l, nRow.l) Prototype.d Excel_XLTable_GetCellAsValueEx(hXLTable.l, nCol.l, nRow.l, nRound.l) Prototype.f Excel_XLTable_GetCellAsSingle(hXLTable.l, nCol.l, nRow.l) Prototype.f Excel_XLTable_GetCellAsSingleEx(hXLTable.l, nCol.l, nRow.l, nRound.l) Prototype.l Excel_XLTable_PutOnClipBoard(hXLTable.l) ; ;=================================== ; Miscellaneous ;=================================== ; Prototype.l Excel_SaveSheetAs(szFileName.s, szFileOut.s, nxlFileType.l, nSheet.l) Prototype.l App_GetVersionString() ; ;=================================== ; Helpfunction ;=================================== ; Procedure.s GetBSTR(pBSTR.l) ProcedureReturn PeekS(pBSTR.l,SysStringByteLen_(pBSTR.l) ) EndProcedure Procedure XLTable_Init() Shared XLTablehModul.l XLTablehModul = OpenLibrary(#PB_Any, "XLTable.dll") If XLTablehModul Global Excel_FileToObject.Excel_FileToObject = GetFunction(XLTablehModul, "Excel_FileToObject") Global Excel_Destroy.Excel_Destroy = GetFunction(XLTablehModul, "Excel_Destroy") Global Excel_GetSheetCount.Excel_GetSheetCount = GetFunction(XLTablehModul, "Excel_GetSheetCount") Shared Excel_GetSheetName_.Excel_GetSheetName Excel_GetSheetName_ = GetFunction(XLTablehModul, "Excel_GetSheetName") Global Excel_SheetToXLTable.Excel_SheetToXLTable = GetFunction(XLTablehModul, "Excel_SheetToXLTable") Global Excel_XLTable_GetMaxCols.Excel_XLTable_GetMaxCols = GetFunction(XLTablehModul, "Excel_XLTable_GetMaxCols") Global Excel_XLTable_GetMaxRows.Excel_XLTable_GetMaxRows = GetFunction(XLTablehModul, "Excel_XLTable_GetMaxRows") Global Excel_XLTable_CellIsValue.Excel_XLTable_CellIsValue = GetFunction(XLTablehModul, "Excel_XLTable_CellIsValue") Shared Excel_XLTable_GetCellAsString_.Excel_XLTable_GetCellAsString Excel_XLTable_GetCellAsString_ = GetFunction(XLTablehModul, "Excel_XLTable_GetCellAsString") Global Excel_XLTable_GetCellAsValue.Excel_XLTable_GetCellAsValue = GetFunction(XLTablehModul, "Excel_XLTable_GetCellAsValue") Global Excel_XLTable_GetCellAsValueEx.Excel_XLTable_GetCellAsValueEx = GetFunction(XLTablehModul, "Excel_XLTable_GetCellAsValueEx") Global Excel_XLTable_GetCellAsSingle.Excel_XLTable_GetCellAsSingle = GetFunction(XLTablehModul, "Excel_XLTable_GetCellAsSingle") Global Excel_XLTable_GetCellAsSingleEx.Excel_XLTable_GetCellAsSingleEx = GetFunction(XLTablehModul, "Excel_XLTable_GetCellAsSingleEx") Global Excel_XLTable_PutOnClipBoard.Excel_XLTable_PutOnClipBoard = GetFunction(XLTablehModul, "Excel_XLTable_PutOnClipBoard") Global Excel_SaveSheetAs.Excel_SaveSheetAs = GetFunction(XLTablehModul, "Excel_SaveSheetAs") Shared App_GetVersionString_.App_GetVersionString App_GetVersionString_ = GetFunction(XLTablehModul, "App_GetVersionString") EndIf ProcedureReturn XLTablehModul EndProcedure Procedure XLTable_End() Shared XLTablehModul.l If XLTablehModul CloseLibrary(XLTablehModul) EndIf EndProcedure Procedure.s Excel_GetSheetName(hObject.l, nSheet.l) Shared Excel_GetSheetName_.Excel_GetSheetName ProcedureReturn GetBSTR(Excel_GetSheetName_(hObject, nSheet)) EndProcedure Procedure.s Excel_XLTable_GetCellAsString(hXLTable.l, nCol.l, nRow.l) Shared Excel_XLTable_GetCellAsString_.Excel_XLTable_GetCellAsString ProcedureReturn GetBSTR(Excel_XLTable_GetCellAsString_(hXLTable, nCol, nRow)) EndProcedure Procedure.s App_GetVersionString() Shared App_GetVersionString_.App_GetVersionString ProcedureReturn GetBSTR(App_GetVersionString_()) EndProcedure
die sich doch gut
// Nachtrag:
Sind noch ein paar Fehler in der Include, werde es später korrigieren!!!
// Nachtrag2:
korriegiert
Ich habs leider nicht hinbekommen

Gruß Falko
- 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
Warum nutzte nicht einfach PureDisphelper?
Ich sehe keinen Sinn mehr in der DLL. Da ich auch keine Excel zur Verfügung
habe, kann ich auch nichts testen.
Ich weiß auch nicht, warum die unter PB4.10 nicht mehr laufen sollte?
Es dürften keine Änderungen erforderlich sein.
Gruß
Thomas
Ich sehe keinen Sinn mehr in der DLL. Da ich auch keine Excel zur Verfügung
habe, kann ich auch nichts testen.
Ich weiß auch nicht, warum die unter PB4.10 nicht mehr laufen sollte?
Es dürften keine Änderungen erforderlich sein.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Falko
- Admin
- Beiträge: 3535
- 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:
Ich würde das ja gerne mit PureDisphelper machen.
Aber irgendwie habe ich damit noch Verständnisprobleme mit
den Objekten und Methoden sowie die passende Information für
das Anwenden zum Auslesen einer Zelle aus einer Exceltabelle, dessen
Werte ich von einer Spalte in einer anderen Spalte verschieben möchte.
Leider weiß ich im Moment nicht, wo ich hierzu die die passenden Infos
finde.
Deswegen hatte ich versucht die alte DLL anzuwenden, welche unter PB 4.1 aufgrund GetBSTR(pBSTR.l) scheitert.
Ein evtl. Grund für das Nichtfunktionieren bzw. für das Invalid Memory,
könnte sein, das ich Office 2007 habe, was ich mir aber nicht vorstellen
kann.
Gruß Falko
Aber irgendwie habe ich damit noch Verständnisprobleme mit
den Objekten und Methoden sowie die passende Information für
das Anwenden zum Auslesen einer Zelle aus einer Exceltabelle, dessen
Werte ich von einer Spalte in einer anderen Spalte verschieben möchte.
Leider weiß ich im Moment nicht, wo ich hierzu die die passenden Infos
finde.
Deswegen hatte ich versucht die alte DLL anzuwenden, welche unter PB 4.1 aufgrund GetBSTR(pBSTR.l) scheitert.
Ein evtl. Grund für das Nichtfunktionieren bzw. für das Invalid Memory,
könnte sein, das ich Office 2007 habe, was ich mir aber nicht vorstellen
kann.
Gruß Falko
- 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
Wenns an der einen Procedure liegt, was ich mir nicht so recht vorstellen kann, hier:
Dann sollte es damit gehen.
Code: Alles auswählen
Procedure.s GetBSTR(bstr)
If bstr
ProcedureReturn PeekS(bstr,-1,#PB_Unicode)
EndIf
EndProcedure
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Falko
- Admin
- Beiträge: 3535
- 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:
Danke Thomas,
hiermit ist das invalid Memory nun weg
Dieses habe ich dann probiert:
Die Version, ist wohl klar, da Excel 2007 zu derzeit noch nicht existierte.
Nur die Werte die eigentlich Floatwerde sind werden mir mit
0.0 angezeigt. Kann sein, das MS wiedermal ein anderes Format gemacht
hat, oder ich einen Fehler im source habe.
Werde wohl morgen weiter probieren.
Trotzdem, danke für die Procedure womit das invalid Memory nicht
mehr auftaucht.
Gruß Falko
hiermit ist das invalid Memory nun weg

Dieses habe ich dann probiert:
Code: Alles auswählen
....
If XLTable_Init()
SFile.s="test.xls"
hObject.l=Excel_FileToObject(SFile)
hXLTable=Excel_SheetToXLTable(hObject, 1)
Debug App_GetVersionString()
For i= 0 To 10
For b= 0 To 10
Debug Excel_XLTable_GetCellAsSingle(hXLTable, i, b)
Next b
Next i
XLTable_End()
Else
MessageRequester("Achtung","Tabelle konnte nicht geöffnet werden")
EndIf
End
Nur die Werte die eigentlich Floatwerde sind werden mir mit
0.0 angezeigt. Kann sein, das MS wiedermal ein anderes Format gemacht
hat, oder ich einen Fehler im source habe.
Werde wohl morgen weiter probieren.
Trotzdem, danke für die Procedure womit das invalid Memory nicht
mehr auftaucht.

Gruß Falko