xlsx richtig verpacken

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

xlsx richtig verpacken

Beitrag von The_Dark_Zim-.- »

Hey ho,

ich versuche gerade eine *.xlsx Datei zu erstellen. Die xml Datein bekomme ich geschrieben. Wenn ich das ganze dann mit 7zip oder Winrar verpacke kann ich es mit LibreOffice öffnen. Aber wenn ich es mit dem PB Packer verpacke geht es nicht. Dann kommt immer eine Filterliste, wenn ich dort dann Excel 2010 raussuche kommt es zu einem Fehler.

Ich denke mal er verpackt, trotz UseZipPacker(), anderes. Hat jemand eine Idee was ich anders machen könnte? Kann da CompressMemory() evtl. funktionieren oderso?

Gruß Zim
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Re: xlsx richtig verpacken

Beitrag von uweb »

hey ho,
eventuell klappt das mit CompressMemory() - versuch macht klug.
für den fall, dass nicht:
ich habe zwar keine erfahrung mit *.xlsx, wohl aber damit manchmal den wald vor lauter bäumen nicht zu sehen.
:)
es gibt zahlreiche alternativen. du bist nicht auf die pb-packer-funktionen angewiesen.
suche doch einfach mal nach 'zip' mit 'Nur im Betreff der Themen'. da findest du zahlreiche möglichkeiten - z.t. aus älteren versionen.
ffpx
uwe
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: xlsx richtig verpacken

Beitrag von Kiffi »

die mit folgendem Code erstellte XLSX-Datei kann MS Excel 2007 problemlos öffnen

SoftMaker PlanMaker 2012 meldet: Unbekanntes Dateiformat.

LibreOffice habe ich nicht installiert; dürfte aber ähnlich wie SoftMaker sein.

Code: Alles auswählen

EnableExplicit

Global NewList FileToZip.s()

Procedure ListFiles(EntryPath.s)
	
	; Original von Lebostein
	
	Protected UsedDirectory
	Protected EntryType
	Protected EntryName.s
	
	If Right(EntryPath, 1) <> "\" : EntryPath + "\" : EndIf
	
	UsedDirectory = ExamineDirectory(#PB_Any, EntryPath, "*.*")
	
	While NextDirectoryEntry(UsedDirectory)
		
		EntryType = DirectoryEntryType(UsedDirectory)
		EntryName = DirectoryEntryName(UsedDirectory)
		
		If EntryName = "." Or EntryName = "..": Continue: EndIf
		
		If EntryType = #PB_DirectoryEntry_File
			AddElement(FileToZip())
			FileToZip() = EntryPath + EntryName
		EndIf
		
		If EntryType = #PB_DirectoryEntry_Directory
			ListFiles(EntryPath + EntryName)
		EndIf
		
	Wend: FinishDirectory(UsedDirectory)
	
EndProcedure

Define RootFolder.s = "D:\xlsxtest\xlsxtest\"

ListFiles(RootFolder)

UseZipPacker()

If CreatePack(0, "D:\xlsxtest\xlsxtestpb.xlsx")
	ForEach FileToZip()
		AddPackFile(0, FileToZip(), ReplaceString(FileToZip(), RootFolder, ""))  
	Next
	ClosePack(0)
EndIf
Grüße ... Kiffi

// Edit: Hat wohl was mit dem Komprimierungsgrad zu tun. Die Originaldatei,
aus der ich den Inhalt entzippt habe, ist 8 KB groß; die von PB erstellte ist
nur 6 KB groß.
a²+b²=mc²
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Re: xlsx richtig verpacken

Beitrag von alen »

Hallo Zusammen,

vor längerem hatte ich damit auch rumgespielt. Ging es da nicht um in einer XML Datei verpackten Checksumme die zum Archiv passen musste.
Kann mich nicht mehr so gut daran erinnern. Aber ich meine wenn man keine Checksumme gebildet und mitgegeben hat wurde das als "unbekanntes Format" bemängelt.

Hoffe Die Info hilft ein wenig weiter.

Grüße
Alen
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Antworten