Excelレポートの生成
売上や作業記録などのデータを XLSX に書き出せます。見出しの書式や列幅を設定し、アプリにレポート出力機能を追加できます。
SwiftSheets / Swift ライブラリ
XLSX、XLSM、CSV / TSV、ODS、Apple Numbers に対応する Swift ライブラリです。ファイルの読み込み、セルの編集、書式設定、保存を共通の API で実装できます。
用途
ブックを表す Workbook、シートを表す Sheet、セルの値を表す CellValue を使います。形式ごとに読み込みと書き出しを実装する必要がありません。
売上や作業記録などのデータを XLSX に書き出せます。見出しの書式や列幅を設定し、アプリにレポート出力機能を追加できます。
Excel、CSV、ODS、Numbers のデータを共通のモデルに読み込めます。取り込み後のセル操作を共通化し、別の形式への変換にも使えます。
既存ファイルを開いて数値や書式を変更できます。同じ形式でブック全体を保存する XLSX / XLSM では、ライブラリが解釈しない部品を元のバイト列で保持します。
ライブラリの特徴
Swift の型やクロージャーを使って表を操作できます。大きなデータには、メモリを抑えるストリーミング処理と複数シートの並列読み込みを用意しています。
sheet["B2"] = 150_000 のように、文字列や数値を直接代入できます。editSheet のクロージャー内で編集できるので、シートを取り出して戻す手順も省けます。
Workbook と Sheet は値型です。Sendable に対応し、非同期処理へデータを渡せます。
Swift 製のライブラリで、外部パッケージへの依存がありません。すべての形式を含む SwiftSheets のほか、SheetXLSX や SheetCSV などを選んで組み込めます。
Mac・iPhone・iPad のアプリだけでなく、Linux のサーバー処理でも利用できます。
StreamingReader と StreamingWriter で、表全体をメモリに保持せず読み書きできます。大量のデータの集計やレポート出力に適しています。
値と書式を扱う方式です。結合セル・注釈・未解釈部品の保持には、ブック全体を読み込む方式を使います。
条件を満たす XLSX は、複数のシートを並列に解析して読み込み時間を短縮します。ReadOptions.concurrency で並列数を調整し、速度とメモリ使用量のバランスを選べます。
1 を指定するとシートを順番に読み込みます。
| 処理方式 | 時間 | 最大メモリ使用量 |
|---|---|---|
| ブック全体の読み込み | 1.47 秒 | 213.3 MB |
| ブック全体の書き出し | 0.93 秒 | 214.8 MB |
| 1行ずつ読み込み | 1.01 秒 | 13.2 MB |
| 1行ずつ書き出し | 1.10 秒 | 10.8 MB |
同じ100万セルを8シートに分けた読み込みでは、逐次処理が 1.35 秒・139.1 MB、並列処理が 0.65 秒・228.8 MB でした。
測定: 2026年9月13日 / SwiftSheets 1.0.0 / Apple M2・メモリ8 GB / Swift 6.4・リリースビルド。100列 × 10,000行の合成データで、書式や図は含みません。最大メモリ使用量はプロセス全体のピークです。データの内容や実行環境によって結果は変わります。
測定条件と全形式の計測結果 ↗基本操作
地域別の売上を Excel の XLSX 形式に保存します。次のサンプルでは保存したファイルを読み込み、セルの更新や LibreOffice などで使う ODS 形式への変換を行います。売上の単位は円です。
import Foundation
import SwiftSheets
var book = Workbook()
book.sheets[0].name = "Sales"
book.editSheet(at: 0) { sheet in
sheet.append(["地域", "売上(円)"])
sheet.append(["東京", 120_000])
sheet.append(["大阪", 85_000])
sheet.setStyle("A1:B1") {
$0.font.bold = true
$0.fill = .solid(Color(hex: "EAF1DC"))
}
sheet.setStyle("B2:B3") {
$0.numberFormat = "#,##0"
}
sheet.autofitColumns()
}
let result = try book.write(
to: URL(filePath: "sales.xlsx"))
print(result.warnings)| 行 | A | B |
|---|---|---|
| 1 | 地域 | 売上(円) |
| 2 | 東京 | 120,000 |
| 3 | 大阪 | 85,000 |
Sales シートに地域と売上を追加し、見出しと数値の書式を設定します。write(to:) の戻り値から保存時の警告を確認できます。
右の表は掲載コードの出力例です。ブラウザ内で Swift は実行しません。ダウンロード用ファイルは掲載コードを実行して生成しています。コードはカレントディレクトリにファイルを読み書きします。
導入
SwiftSheets を選び、使うターゲットに追加します。import SwiftSheets を書いて、上のサンプルから始めましょう。Swift Package Manager を使う場合は、右の内容を既存の Package.swift に組み込みます。App は自分のターゲット名に置き換えてください。
// Package.swift の該当する配列に追加
dependencies: [
.package(
url: "https://github.com/nanbu/SwiftSheets.git",
from: "1.0.0"
)
],
targets: [
.target(name: "App", dependencies: [
.product(name: "SwiftSheets", package: "SwiftSheets")
])
]ファイル形式
形式ごとに保存できる機能が異なります。読み込み時や変換時に扱えない内容は、結果の warnings で確認できます。
| 形式 | 形式の概要 | SwiftSheetsでの保存 |
|---|---|---|
| XLSX .xlsx | Microsoft Excel の標準的なブック形式です。値・数式・書式・複数のシートを保存できます。 | 読み書きに対応します。同じ形式でブック全体を保存すると、未解釈の部品を保持し、モデル化した内容は意味を保って再生成します。 |
| XLSM .xlsm | Excel のマクロ言語である VBA のプログラムを保存できるブック形式です。マクロを含む帳票などで使われます。 | 読み書きに対応します。同じ XLSM 形式ならマクロの部品も保持します。ライブラリがマクロを実行することはありません。 |
| CSV / TSV .csv / .tsv | 値をカンマやタブで区切ったテキスト形式です。アプリやシステム間のデータ交換に使われます。書式や複数シートは保存しません。 | 読み書きに対応します。セルの値を保存し、区切り文字や文字コードを指定できます。 |
| ODS .ods | OpenDocument Spreadsheet の略です。LibreOffice Calc などで標準的に使われる公開規格の表計算形式で、値・数式・書式・複数シートを保存できます。 | 読み書きに対応します。対応する値・数式・書式などを再構築します。元ファイルのすべての部品をそのまま保持する方式ではありません。 |
| Numbers .numbers | Apple の表計算アプリ Numbers の形式です。1枚のシートに複数の表を配置でき、Mac・iPhone・iPad で使われます。 | 読み書きに対応します。テンプレートからファイルを再生成します。元ファイルから保持できる機能は、詳しい対応表で確認できます。 |
大きな表には、1行ずつ処理する読み書きも用意しています。ただし、その処理では結合セル・注釈・未解釈部品の保持は対象外です。WebAssembly には実行環境や書き出し方法の制限があります。
ソースコードと資料