CorexLSX ist eine Bibliothek, die darauf ausgerichtet ist, die Struktur auf niedriger Ebene des XML-basierten XLSX-Tabellenkalkulationsformats darzustellen. Sie können ein Tabellenkalkulationsarchiv mit .xlsx -Erweiterung öffnen und seine interne Struktur in Modelltypen zuordnen, die direkt in Swift ausgedrückt werden.
Es ist wichtig zu beachten, dass diese Bibliothek nur für das .xlsx Format schreibgeschützt ist. Da das ältere Legacy .xls -Tabellenkalkulationsformat völlig unterschiedliche Interna enthält, finden Sie in anderen Bibliotheken, wenn Sie mit Dateien dieses Typs arbeiten müssen.
Wenn Ihre .xlsx Dateien die agile Verschlüsselung von ECMA-376 verwenden (was die beliebteste Sorte zu sein scheint), schauen Sie sich die CryptoOffice-Bibliothek an.
Auf unseren Github -Seiten ist automatisch generierte Dokumentationen verfügbar.
Schließen Sie sich unserer Zwietracht für Fragen und freundliche Scherze an.
Um das Beispielprojekt auszuführen, klonen Sie das Repo und führen Sie zuerst pod install aus dem Beispielverzeichnis aus.
Modelltypen in CoreXLSX kartieren die interne Struktur des XLSX -Formats direkt mit einer vernünftigeren Benennung, die auf einige Attribute angewendet wird. Die API ist ziemlich einfach:
import CoreXLSX
let filepath = " ./categories.xlsx "
guard let file = XLSXFile ( filepath : filepath ) else {
fatalError ( " XLSX file at ( filepath ) is corrupted or does not exist " )
}
for wbk in try file . parseWorkbooks ( ) {
for (name , path ) in try file . parseWorksheetPathsAndNames ( workbook : wbk ) {
if let worksheetName = name {
print ( " This worksheet has a name: ( worksheetName ) " )
}
let worksheet = try file . parseWorksheet ( at : path )
for row in worksheet . data ? . rows ?? [ ] {
for c in row . cells {
print ( c )
}
}
}
} Dies druckt Rohzellendaten aus jedem Arbeitsblatt in der angegebenen XLSX -Datei. Weitere Atttributes finden Sie im Worksheet , den Sie möglicherweise aus einer analysierten Datei lesen müssen.
Sie sollten keine Zellen über ihre Indizes im cells ansprechen. Jede Zelle hat eine reference , die Sie lesen können, um zu verstehen, wo genau eine bestimmte Zelle sich befindet. Entsprechende Eigenschaften in der CellReference geben Ihnen die genaue Position einer Zelle.
Das .xlsx -Format unterscheidet eine klare Unterscheidung zwischen einer leeren Zelle und des Fehlens einer Zelle. Wenn Sie beim Iterieren durch das cells keine Zelle oder Zeile erhalten, bedeutet dies, dass in Ihrem Dokument keine solche Zelle oder eine Reihe vorhanden ist. Ihr .xlsx -Dokument sollte in erster Linie leere Zellen und Zeilen enthalten, damit Sie sie lesen können.
Wenn Sie diese Unterscheidung durchführen, wird das Format effizienter, insbesondere für spärliche Tabellenkalkulationen. Wenn Sie eine Tabelle mit einer einzelnen Zelle Z1000000 hätten, würde es keine Millionen leerer Zellen und eine einzelne Zelle mit einem Wert enthalten. Die Datei speichert nur eine einzelne Zelle, mit der schnell sparsame Tabellen schnell gespeichert und geladen werden können, wodurch auch weniger Platz auf dem Dateisystem eingenommen wird.
Angesichts der Tatsache, dass das .xlsx -Format Zellen speichert, müssen Sie möglicherweise alle Zellen durch alle Zellen iterieren und Ihre eigene Kartierung aus Zellreferenzen auf tatsächliche Zellwerte aufbauen. Die CorexLSX -Bibliothek macht dies derzeit nicht automatisch und Sie müssen Ihre eigene Zuordnung implementieren, wenn Sie sie benötigen. Sie können gerne eine Pull -Anfrage einreichen, die die Funktionen als optionalen Schritt während der Parsen hinzufügt.
Saiten in Tabellenkalkulations -Interna werden häufig als Zeichenfolgen, die zwischen mehreren Arbeitsblättern geteilt werden, dargestellt. Um einen String -Wert aus einer Zelle zu analysieren, sollten Sie die Funktion stringValue(_: SharedStrings) in Cell zusammen mit parseSharedString() auf XLSXFile verwenden.
So können Sie zum Beispiel alle Zeichenfolgen in Spalte "C" erhalten:
if let sharedStrings = try file . parseSharedStrings ( ) {
let columnCStrings = worksheet . cells ( atColumns : [ ColumnReference ( " C " ) ! ] )
. compactMap { $0 . stringValue ( sharedStrings ) }
} Verwenden Sie die dateValue -Eigenschaft auf dem Cell , um einen Datumswert aus einer Zelle zu analysieren:
let columnCDates = worksheet . cells ( atColumns : [ ColumnReference ( " C " ) ! ] )
. compactMap { $0 . dateValue } Verwenden Sie die richStringValue -Funktion in ähnlicher Weise, um reiche Saiten zu analysieren:
if let richStrings = try file . parseSharedStrings ( ) {
let columnCRichStrings = worksheet . cells ( atColumns : [ ColumnReference ( " C " ) ! ] )
. compactMap { $0 . richStringValue ( sharedStrings ) }
} Seit Version 0.5.0 können Sie Stilinformationen aus dem Archiv mit der neuen parseStyles() -Funktion analysieren. Weitere Informationen finden Sie im Model Styles -Modell. Sie sollten auch beachten, dass nicht alle XLSX -Dateien Stilinformationen enthalten. Sie sollten daher darauf vorbereitet sein, in diesem Fall die von parseStyles() -Funktion geworfenen Fehler zu verarbeiten.
Hier ist ein kurzes Beispiel, das eine Liste der verwendeten Schriftarten abholt:
let styles = try file . parseStyles ( )
let fonts = styles . fonts ? . items . compactMap { $0 . name ? . value } Um eine bestimmte Zelle zu formatieren, verwenden Sie format(in:) und font(in:) Funktionen und geben Sie das Ergebnis von parseStyles weiter:
let styles = try file . parseStyles ( )
let format = worksheet . data ? . rows . first ? . cells . first ? . format ( in : styles )
let font = worksheet . data ? . rows . first ? . cells . first ? . font ( in : styles ) Wenn Sie auf eine Datei stolpern, die nicht analysiert werden kann, stellen Sie bitte ein Problem ein, das die genaue Fehlermeldung veröffentlicht. Dank der Verwendung von Standard -Swift Codable -Protokoll werden detaillierte Fehler generiert, in denen ein fehlendes Attribut aufgelistet ist, sodass es einfach zum Modell hinzugefügt werden kann, das eine breitere Unterstützung für Formatis ermöglicht. Das Anbringen einer Datei, die nicht analysiert werden kann, hilft auch bei der Diagnose von Problemen erheblich. Wenn diese Dateien sensible Daten enthalten, empfehlen wir, gefälschte Daten mit denselben Tools zu verschleiern oder zu generieren, dass die Originaldateien generiert wurden. Angenommen, das Problem kann weiterhin auf diese Weise reproduziert werden.
Wenn die gesamte Datei nicht angehängt werden kann, versuchen Sie, einen ausreichend großen Wert (zwischen 10 und 20 normalerweise gut) zu übergeben, um das Argument von XLSXFile Initializer errorContextLength . Dadurch wird das fehlgeschlagene XML -Snippet mit der Debug -Beschreibung der geworfenen Fehler gebündelt. Bitte fügen Sie auch die vollständige Debug -Beschreibung bei, wenn möglich bei der Meldung von Problemen.
Da jede XLSX -Datei ein ZIP -Archiv von XML -Dateien ist, verwendet CoreXLSX XMLCoder -Bibliothek und Standard Codable Protokolle, um XML -Knoten und Atrribute in einfache schnelle Strukturen zuzuordnen. ZIPFoundation wird zur In-Memory-Dekompression von ZIP-Archiven verwendet. Hier finden Sie eine detaillierte Beschreibung.
Apfelplattformen
Linux
Swift Package Manager ist ein Tool zur Verwaltung der Verteilung des Swift -Code. Es ist in das Swift -Build -System integriert, um den Prozess des Herunterladens, Kompilierens und Verknüpfungen von Abhängigkeiten auf allen Plattformen zu automatisieren.
Sobald Sie Ihr Swift -Paket eingerichtet haben, ist das Hinzufügen von CoreXLSX als Abhängigkeit so einfach wie das Hinzufügen zum dependencies Ihres Package.swift .
dependencies: [
. package ( url : " https://github.com/CoreOffice/CoreXLSX.git " ,
. upToNextMinor ( from : " 0.14.1 " ) )
]Wenn Sie CorexLSX in einer mit Xcode erstellten App verwenden, können Sie diese auch als direkte Abhängigkeit mit der GUI von Xcode hinzufügen.
CorexLSX ist über Cocoapods auf Apples Plattformen erhältlich. Um es zu installieren, fügen Sie einfach pod 'CoreXLSX', '~> 0.14.1' zu Ihrem Podfile hinzu, wie hier gezeigt:
source 'https://github.com/CocoaPods/Specs.git'
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
use_frameworks!
target '<Your Target Name>' do
pod 'CoreXLSX' , '~> 0.14.1'
end Auf macOS ist der einfachste Weg, um an dem Projekt zu arbeiten, das Package.swift -Datei in Xcode 11 oder später öffnen. Es gibt eine umfangreiche Testsuite, die beide Dateien von End-to-End-Dateien und isolierten Snippets gegen ihre entsprechenden Modellwerte testen.
Wenn Sie es vorziehen, nicht mit Xcode zu arbeiten, unterstützt das Projekt SwiftPM vollständig und der übliche Workflow mit swift build und swift test sollte funktionieren. Andernfalls melden Sie dies als Fehler.
Dieses Projekt verwendet SwiftFormat und Swiftlint, um den Formatierungs- und Codierungsstil durchzusetzen. Wir ermutigen Sie, SwiftFormat in einem lokalen Klon des Repositorys in jeder Hinsicht für Sie entweder manuell oder automatisch über eine Xcode-Erweiterung, die Erstellungsphase oder den Git-Vorkommit-Haken usw. zu betreiben.
Um sicherzustellen, dass diese Tools ausgeführt werden, bevor Sie Ihre Änderungen bei macOS begehen, werden Sie aufgefordert, dies einmal auszuführen, um den Pre-Commit-Haken einzurichten:
brew bundle # installs SwiftLint, SwiftFormat and pre-commit
pre-commit install # installs pre-commit hook to run checks before you commit
Weitere Informationen und Installationsanweisungen für andere Plattformen finden Sie auf der Seite "Vorkommot-Dokumentation".
SwiftFormat und Swiftlint laufen auch für jeden PR auf CI und somit kann ein CI -Build mit inkonsistenten Formatierung oder Stil versagen. Wir benötigen CI -Builds, um vor dem Zusammenführen alle PRs zu verabschieden.
Dieses Projekt hält sich an den Verhaltenskodex für den Mitwirkenden. Durch die Teilnahme wird erwartet, dass Sie diesen Code aufrechterhalten. Bitte melden Sie ein inakzeptables Verhalten an [email protected].
CorexLSX ist unter der Apache 2.0 -Lizenz verfügbar. Weitere Informationen finden Sie in der Lizenzdatei.