Corexlsx是一個庫,重點是表示基於XML的XLSX電子表格格式的低級結構。它允許您打開帶有.xlsx擴展名的電子表格存檔,並將其內部結構映射到直接在Swift中表達的模型類型。
重要的是要注意,該庫僅提供僅針對.xlsx格式的讀取支持。由於較舊的舊版.xls電子表格格式具有完全不同的內部詞,因此,如果您需要使用該類型的文件,請參考其他庫。
如果您的.xlsx文件使用ECMA-376敏捷加密(似乎是最受歡迎的品種),請查看CryptoOffice庫。
自動生成的文檔可在我們的GitHub頁面上找到。
出於任何疑問和友好的玩笑,加入我們的不和諧。
要運行示例項目,請首先從示例目錄中pod install 。
CoreXLSX中的模型類型直接映射XLSX格式的內部結構,並將更明智的命名應用於一些屬性。 API非常簡單:
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 )
}
}
}
}這將在給定XLSX文件中的每個工作表中打印原始單元格數據。請參閱Worksheet模型,以獲取更多您可能需要從解析文件中讀取的內容。
您不應通過cells陣列中的索引來解決細胞的索引。每個單元格都有一個reference屬性,您可以閱讀以了解給定單元格的確切位置。 CellReference結構上的相應特性可為您提供細胞的確切位置。
.xlsx格式在空細胞和不存在細胞之間有明確的區別。如果您在通過cells數組迭代時沒有獲得單元格或行,則意味著您的文檔中沒有此類單元格或行。您的.xlsx文檔首先應該在其中寫入空的單元格和行,以便您能夠閱讀它們。
使這種區別使格式更有效,尤其是對於稀疏的電子表格。如果您的電子表格具有單個單元格Z1000000,則不會包含數百萬個空單元格和具有值的單個單元格。該文件僅存儲一個單元格,該單元格可以快速保存和加載稀疏的電子表格,從而在文件系統上佔用更少的空間。
鑑於.xlsx格式如何存儲單元格,因此您可能必須迭代所有單元格,並構建自己的映射從單元格引用到實際單元格值。 Corexlsx庫當前未自動執行此操作,如果需要,您將必須實現自己的映射。歡迎您提交拉動請求,該請求將功能添加為解析過程中的可選步驟。
電子表格內部設備中的字符串經常表示為多個工作表之間的字符串。要從單元格中解析字符串值,您應該在Cell上使用stringValue(_: SharedStrings)函數,以及XLSXFile上的parseSharedString() 。
例如,您可以在“ C”列中獲取所有字符串:
if let sharedStrings = try file . parseSharedStrings ( ) {
let columnCStrings = worksheet . cells ( atColumns : [ ColumnReference ( " C " ) ! ] )
. compactMap { $0 . stringValue ( sharedStrings ) }
}要從單元格中解析日期值,請在Cell格上使用dateValue屬性:
let columnCDates = worksheet . cells ( atColumns : [ ColumnReference ( " C " ) ! ] )
. compactMap { $0 . dateValue }同樣,要解析豐富的字符串,請使用richStringValue函數:
if let richStrings = try file . parseSharedStrings ( ) {
let columnCRichStrings = worksheet . cells ( atColumns : [ ColumnReference ( " C " ) ! ] )
. compactMap { $0 . richStringValue ( sharedStrings ) }
}由於版本0.5.5,您可以通過新的parseStyles()函數從存檔中解析樣式信息。請參閱Styles模型以獲取更多詳細信息。您還應注意,並非所有XLSX文件都包含樣式信息,因此您應該準備好處理在這種情況下從parseStyles()函數中列出的錯誤。
這是一個簡短的示例,獲取了使用的字體列表:
let styles = try file . parseStyles ( )
let fonts = styles . fonts ? . items . compactMap { $0 . name ? . value }要獲得給定單元格的格式,請使用format(in:)和font(in:)函數,將其傳遞給parseStyles的結果:
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 ) 如果您偶然發現無法解析的文件,請提交發布確切錯誤消息的問題。由於使用了標準Swift Codable協議,生成了詳細的錯誤列出了缺少屬性,因此可以輕鬆地將其添加到啟用更廣泛格式支持的模型中。附加無法解析的文件也將極大地有助於診斷問題。如果這些文件包含任何敏感數據,我們建議使用相同的工具來混淆或生成假數據,這些工具仍然可以通過這種方式複制該問題。
如果無法連接整個文件,請嘗試將足夠大的值(通常在10到20之間效果很好)傳遞到XLSXFile初始化器的errorContextLength參數。這將與丟棄錯誤的調試描述捆綁失敗的XML片段。如果可能的話,請在可能的情況下附加完整的調試說明。
由於每個XLSX文件都是XML文件的ZIP檔案,因此CoreXLSX使用XMLCoder庫和標準Codable協議將XML節點映射到Plain Swift structs中。 ZIPFoundation用於郵政檔案中的內存解壓縮。這裡有詳細的描述。
蘋果平台
Linux
Swift軟件包管理器是管理Swift代碼分佈的工具。它與Swift Build System集成在一起,以自動化下載,編譯和鏈接所有平台的依賴關係的過程。
設置了Swift軟件包後,將CoreXLSX作為依賴關係添加就像將其添加到Package.swift的dependencies值中一樣容易。
dependencies: [
. package ( url : " https://github.com/CoreOffice/CoreXLSX.git " ,
. upToNextMinor ( from : " 0.14.1 " ) )
]如果您在使用Xcode構建的應用程序中使用Corexlsx,則還可以使用Xcode的GUI將其添加為直接依賴關係。
Corexlsx可通過Apple平台上的Cocoapods獲得。要安裝它,只需將pod 'CoreXLSX', '~> 0.14.1'添加到您的Podfile ,如下所示:
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 在MACOS上,最簡單的方法開始處理該項目的方法是打開XCODE 11或更高版本中的Package.swift文件。有一個廣泛的測試套件,兩個測試都針對其相應的模型值端對端和隔離片段進行了測試。
如果您不希望與Xcode合作,則該項目完全支持SwiftPM,並且swift build and swift test的通常工作流程應起作用,否則請將其報告為錯誤。
該項目使用SwiftFormat和Swiftlint來執行格式和編碼樣式。我們鼓勵您通過XCode擴展名,構建階段或Git預先承諾的掛鉤等,以最適合您或自動的方式運行存儲庫的本地克隆。
為了確保這些工具在進行MACOS上的更改之前運行,我們鼓勵您一次運行一次以設置預先承諾的鉤子:
brew bundle # installs SwiftLint, SwiftFormat and pre-commit
pre-commit install # installs pre-commit hook to run checks before you commit
有關其他平台的更多詳細信息和安裝說明,請參閱“預先承諾的文檔”頁面。
SwiftFormat和Swiftlint也在每個PR上都在CI上運行,因此CI構建可能會因格式不一致或樣式而失敗。我們要求CI構建在合併之前通過所有PR通過。
該項目遵守貢獻者盟約行為準則。通過參加,您應該維護此代碼。請向[email protected]報告不可接受的行為。
Corexlsx可在Apache 2.0許可下獲得。有關更多信息,請參見許可證文件。