Warum nehmen dieselben Daten in einer Textdatei mehr Platz ein als in einer Excel-Datei?

59

Ich habe ungefähr 100000 Datenzeilen. Wenn ich diese Daten in einem Textdateiformat speichere, nimmt dies mehr Platz in Anspruch als wenn ich sie in einem Excel-Dateiformat speichere. Warum ist das so?

user734178
quelle

Antworten:

117

Das von modernem Excel verwendete xlsxFormat ist eigentlich ein komprimiertes Format. Es ist ein ZIP-Archiv, das Textdateien (XML-Dateien) in einer bestimmten Struktur enthält.

Wenn Sie Ihre Nur-Text-Datei mit einem ähnlichen ZIP-Komprimierungsprogramm komprimieren, sollten Sie ähnliche Dateigrößen erzielen.

Wie von Bradley Uffner und Morgen in den Kommentaren erwähnt, dedupliziert Excel außerdem identische Zeichenfolgen und speichert nur eine Kopie davon. Ich bin mir nicht sicher, wie genau sich eine solche Methode auszahlt, und sie hängt von Ihrer Datenmenge ab, aber eine einfache Komprimierung mit Reißverschluss wird Sie wahrscheinlich am meisten dahin bringen. 1


9.1.3 Physische Pakete

Jedes Office Open XML-Dokument wird als ZIP-Archiv implementiert.

- ECMA-376-1: 2016


1 Ich vermute, dass diese Deduplizierung am effektivsten ist, wenn Sie über mehrere Arbeitsblätter verfügen, da die Zip-Komprimierung für jede Datei in einem Archiv unabhängig und jeweils nur für einen begrenzten Teil der Daten gilt, indem alle Zeichenfolgen in einer einzigen Datei gespeichert werden sollte für die spätere Komprimierung von Vorteil sein. Praktischer gesagt, wenn Ihr Nur-Text-Format ohnehin in einer einzigen Datei vorliegt, wird es wahrscheinlich kaum einen Unterschied geben.

Bob
quelle
2
Das ist toll! Es gibt sehr gute Einblicke in den Umgang mit Excel-Dateien. Vielen Dank!
Dominique
3
@Dominique Wenn Sie mehr wissen möchten, können Sie mit einem davon experimentieren, indem Sie es entpacken (z. B. mit 7zip oder indem Sie es umbenennen, damit es auf endet .zip). Die Spezifikation ist ebenfalls verfügbar, sorgt jedoch für eine eher trockene Lesung.
Bob
3
Ich denke, Excel verwendet auch ein String-Wörterbuch, in dem Textteile, die zwischen Zellen identisch sind, wiederverwendet werden können, während sie nur einmal gespeichert werden.
Bradley Uffner
1
Basierend auf der API, die von der Apache-Ooxml-Bibliothek bereitgestellt wird, ist ein gemeinsames Zeichenfolgenwörterbuch zumindest wahrscheinlich.
Morgen
2
Freigegebene Zeichenfolgen waren bereits eine Funktion von Excel, als es XLS-Dateien (keine x-Dateien) schrieb, die ein satzorientiertes Format namens BIFF in einem OLE-Container darstellten. Wenn Sie alte XLS-Spezifikationen mit XLSX vergleichen, werden Sie feststellen, dass XLSX nur eine bestimmte xmlified-Zip-Version von BIFF ist. Grundsätzlich hat MS die Shared-String-Funktion für XLSX nicht erfunden, da sie aufgrund der Komprimierung wenig Sinn macht. Sie sind einfach den einfachsten Weg gegangen, XLS in XLSX zu verwandeln.
Guntram Blohm
2

Die Antwort ist richtig, es liegt daran, dass Excel Ihre Daten als XML speichert. Dies hat auch zur Folge, dass das effiziente Sortieren Ihrer Daten auch die Dateigröße verringert. Testen Sie es selbst - sagen Sie, Sie haben Daten wie

A            B                              C
John         Smith-Johnson-Williamson       12345
Sally        Smith-Johnson-Williamson       67890
John         Williams                       34567

Wenn Sie nur nach C sortieren (eine Spalte mit allen oder fast allen eindeutigen Werten), werden die identischen Werte von B nicht benachbart. In Excel sieht das so aus:

<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>

Wenn Sie nach B sortieren (eine Spalte mit gemeinsamen Werten), liegen die identischen Werte nebeneinander. In Excel sieht das so aus:

<Smith-Johnson-Williamson><John><12345>
  <Sally><67890>
<Williams><John><34567>

Da diese lange Zeichenfolge identisch und benachbart ist, weiß Excel, dass sie zusammengepackt werden kann, ähnlich wie beim Schreiben von Listen. Um einen Teil der obigen Zeile zu wiederholen, geben Sie Anführungszeichen ein, anstatt dasselbe erneut zu schreiben. Ich habe in meiner Untersuchung keine Hinweise auf ein Shared-String-Wörterbuch gefunden - nur diese Einrückung anstelle des wiederholten Feldwerts.

Ich hatte Mailinglisten mit 250.000 Kunden in nur 11 Bundesstaaten, und in jedem Datensatz befand sich ein Feld, das eine von zwei Zeichenfolgen war, die das Angebot identifizierten, das sie erhielten. Unsere Angestellten waren aus irgendeinem Grund daran gewöhnt, die Leute anhand ihrer gesprochenen Straße nachzuschlagen, so dass sie nach der Straßennummernspalte, dem Straßennamen, der Stadt usw. sortiert waren. Postleitzahl, Stadt, Straßenname, Hausnummer und schließlich Adresszeile 2, die Dateigröße wurde unglaublich reduziert. Ich habe die entpackte XML-Datei in jeder Reihenfolge überprüft, um festzustellen, was vor sich geht. Daraus habe ich Folgendes abgeleitet. Wenn es mehrere Felder mit mehr als 5 Zeichen gibt, die Werte jedoch begrenzt sind (z. B. Ticketdispositionen wie "gelöst", "abgelehnt", "genehmigt" usw.),

CompanionCube
quelle
Hallo CompanionCube, das ist extrem geniales Wissen. !!! Ich danke dir sehr.
user734178
-5

Wenn Sie eine Nummer wie 3.14159265359 haben, benötigen Sie 13 Byte, um diese in einer Textdatei zu speichern. Wenn Sie diese Nummer als Float speichern, benötigen Sie nur 4 Bytes.

Mirko Ebert
quelle
19
Während dies bei xls(BIFF) der Fall gewesen sein könnte , glaube ich nicht, dass xlsxdies der Fall ist . xlsxSpeichert alle Daten in XML-Dateien, die keine binäre Kodierung von Zahlen durchführen. Sie werden in Textzeichenfolgen konvertiert und als solche gespeichert. Ich versuche immer noch, den relevanten Abschnitt der Spezifikation zu finden, aber meine empirischen Tests (dh das Extrahieren eines gespeicherten Dokuments) zeigen, dass 1.123es in XML buchstäblich als 5-Zeichen-Zeichenfolge gespeichert ist.
Bob
14
ECMA-376-1: 2016 § 18.3.1.4 c(Zelle) zeigt, dass Zellen ihre Daten in vTags speichern , wie in ECMA-376-1: 2016 § 18.3.1.96 v( Zellenwert ) definiert, in denen die möglichen Werte für dieses Element angegeben sind werden durch den einfachen Typ ST_Xstring definiert (§22.9.2.19). - Sie liefern Beispiele, bei <v>28086.3541666667</v>denen die Daten eindeutig als Zeichenfolge gespeichert sind.
Bob
4
@gerrit Leider Excel nicht interpretieren Zahlen als Schwimmer innerhalb des Programms, was zu interessanten Problemen wie Telefonnummern , die letzten Ziffern fallen. Es speichert sie einfach nicht mehr als Floats auf der Festplatte.
Bob
2
@ Bob dies ist auch der Fall für xlsb, die für große Blätter sehr zu empfehlen ist
phuclv
2
Ich weiß nicht, warum diese Antwort so viele Ablehnungen bekommt. Das OP hat nicht angegeben, welches Excel-Format so technisch ist, dass dies auch eine gültige Antwort ist
phuclv