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ファイルのすべてのワークシートから生のセルデータが印刷されます。解析されたファイルから読む必要があるかもしれないaTTTributesについては、 Worksheetモデルを参照してください。
cells内のインデックスを介してセルに対処しないでください。すべてのセルにはreferenceプロパティがあり、特定のセルがどこにあるかを理解するために読むことができます。 CellReference構造の対応する特性は、セルの正確な位置を与えます。
.xlsx形式は、空のセルとセルの欠如を明確に区別します。 cellsを介して反復するときにセルや列を取得していない場合、これはドキュメントにそのようなセルまたは列がないことを意味します。 .xlsxドキュメントには、最初に空のセルと列が書かれている必要があります。
この区別を作成すると、特にスパーススプレッドシートの場合、フォーマットがより効率的になります。単一のセルZ1000000を備えたスプレッドシートがある場合、数百万の空のセルと値のある単一のセルは含まれません。ファイルは単一のセルのみを保存します。これにより、スパーススプレッドシートをすばやく保存およびロードすることができ、ファイルシステムのスペースが少なくなります。
.xlsx形式がセルをどのように保存するかを考えると、すべてのセルを繰り返して、独自のマッピングをセルの参照から実際の細胞値に構築する必要があります。 CoreXLSXライブラリは現在これを自動的に行いません。必要な場合は独自のマッピングを実装する必要があります。解析中にそのような機能をオプションのステップとして追加するプルリクエストを送信できます。
スプレッドシート内部の文字列は、複数のワークシート間で共有される文字列として頻繁に表されます。セルから文字列値を解析するには、 XLSXFileのparseSharedString()とともにstringValue(_: SharedStrings)関数をCellで使用する必要があります。
列「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.0以降、新しい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プロトコルの使用のおかげで、欠落している属性をリストして詳細なエラーが生成されるため、モデルに簡単に追加でき、より広範なフォーマットサポートを可能にします。解析できないファイルを添付することは、問題の診断にも大いに役立ちます。これらのファイルに機密データが含まれている場合、問題をこの方法で再現できると仮定して、元のファイルを生成した同じツールで偽データを難読化または生成することをお勧めします。
ファイル全体を添付できない場合は、 XLSXFile InitializerのerrorContextLength引数に十分に大きな値(通常は適切に機能します)を渡してみてください。これにより、スローされたエラーのデバッグ説明で失敗したXMLスニペットがバンドルされます。問題を報告するときに、可能であれば完全なデバッグの説明も添付してください。
すべてのXLSXファイルはXMLファイルのZIPアーカイブであるため、 CoreXLSX XMLCoderライブラリと標準のCodableプロトコルを使用してXMLノードをマッピングし、Atrributesをプレーンスウィフト構造体にマッピングします。 ZIPFoundation 、zipアーカイブのメモリ内減圧に使用されます。詳細な説明はこちらから入手できます。
Appleプラットフォーム
Linux
Swift Package Managerは、Swiftコードの配布を管理するためのツールです。 Swiftビルドシステムと統合されて、すべてのプラットフォームの依存関係をダウンロード、コンパイル、リンクするプロセスを自動化します。
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とswift testで通常のワークフローが機能するはずです。そうでなければ、これをバグとして報告してください。
このプロジェクトでは、SwiftFormatとSwiftlintを使用して、フォーマットとコーディングスタイルを実施しています。リポジトリのローカルクローン内でSwiftFormatを実行することをお勧めします。
これらのツールがMacOSで変更を犯す前に実行されることを保証するために、あなたはこれを1回実行して、コミット前のフックをセットアップすることをお勧めします。
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ビルドは一貫性のないフォーマットまたはスタイルで失敗する可能性があります。マージする前に、すべてのPRSに合格するためにCIビルドが必要です。
このプロジェクトは、貢献者の契約行動規範を順守しています。参加することで、このコードを維持することが期待されます。容認できない動作を[email protected]に報告してください。
corexlsxは、Apache 2.0ライセンスで利用できます。詳細については、ライセンスファイルを参照してください。