Работа с Excel в Swift (iOS/macOS): Обзор библиотек и примеры кода
Обработка табличных данных — одна из ключевых задач в современных приложениях. На платформах Apple (iOS, macOS, watchOS) встроенной поддержки формата Excel (.xlsx) нет, поэтому разработчики используют сторонние библиотеки. В этой статье мы рассмотрим три основных подхода и библиотеки для работы с Excel в Swift: CoreXLSX, SwiftExcel и XLConnect. Вы узнаете, как читать, создавать и редактировать файлы, а также получите готовые примеры кода.
1. CoreXLSX — чтение и запись .xlsx файлов
CoreXLSX — самая популярная библиотека для работы с Excel в Swift. Она поддерживает чтение и запись файлов формата Office Open XML (OOXML). Библиотека написана на чистом Swift и не требует внешних зависимостей.
Установка через Swift Package Manager
// В Package.swift добавьте:
dependencies: [
.package(url: "https://github.com/CoreOffice/CoreXLSX.git", from: "0.14.0")
]
Чтение Excel-файла
import CoreXLSX
guard let filePath = Bundle.main.path(forResource: "data", ofType: "xlsx") else {
print("Файл не найден")
return
}
let file = try XLSXFile(filepath: filePath)
let sharedStrings = try file?.parseSharedStrings()
let worksheets = try file?.parseWorksheetPaths()
for worksheetPath in worksheets ?? [] {
let worksheet = try file?.parseWorksheet(at: worksheetPath)
let rows = worksheet?.data?.rows ?? []
for row in rows {
for cell in row.cells {
if let sharedStrings = sharedStrings {
let reference = cell.reference
let value = cell.stringValue(sharedStrings) ?? cell.value ?? ""
print("Ячейка \(reference): \(value)")
}
}
}
}
Создание нового файла
import CoreXLSX
let path = FileManager.default.temporaryDirectory.appendingPathComponent("newFile.xlsx")
let file = XLSXFile(filepath: path.path)
// Создаем рабочий лист
let worksheet = Worksheet(data: DataSheet(rows: [
Row(cells: [
Cell(reference: "A1", value: "Имя"),
Cell(reference: "B1", value: "Возраст")
]),
Row(cells: [
Cell(reference: "A2", value: "Анна"),
Cell(reference: "B2", value: "25")
])
]))
try file?.write(worksheet: worksheet, at: "xl/worksheets/sheet1.xml")
2. SwiftExcel — легковесная альтернатива
SwiftExcel — минималистичная библиотека для создания Excel-файлов. Она не поддерживает чтение существующих файлов, но отлично подходит для генерации отчетов и экспорта данных.
Установка через CocoaPods
pod 'SwiftExcel'
Пример создания таблицы
import SwiftExcel
let workbook = Workbook()
let sheet = workbook.createSheet(named: "Отчет")
// Заполняем заголовки
sheet.write(value: "Продукт", column: 1, row: 1)
sheet.write(value: "Цена", column: 2, row: 1)
sheet.write(value: "Количество", column: 3, row: 1)
// Данные
sheet.write(value: "Ноутбук", column: 1, row: 2)
sheet.write(value: 1500.00, column: 2, row: 2)
sheet.write(value: 10, column: 3, row: 2)
// Сохраняем
let path = FileManager.default.temporaryDirectory.appendingPathComponent("report.xlsx")
try workbook.save(to: path)
print("Файл сохранен: \(path)")
3. XLConnect — работа с Excel через OpenXML (macOS)
XLConnect — библиотека для macOS, которая использует формат OpenXML напрямую. Она поддерживает сложные операции: объединение ячеек, стили, формулы и диаграммы.
Установка через Carthage
github "SwiftStudies/XLConnect" ~> 2.0
Пример с формулами и стилями
import XLConnect
let workbook = Workbook()
let sheet = try workbook.createSheet("Финансы")
// Стиль для заголовков
let headerStyle = CellStyle()
headerStyle.font = Font(bold: true, size: 14)
headerStyle.fill = Fill(backgroundColor: Color(red: 0.2, green: 0.6, blue: 0.8))
// Заголовки
try sheet.write(cell: Cell("Дата", style: headerStyle), at: .init(row: 1, column: 1))
try sheet.write(cell: Cell("Доход", style: headerStyle), at: .init(row: 1, column: 2))
try sheet.write(cell: Cell("Расход", style: headerStyle), at: .init(row: 1, column: 3))
// Данные с формулой
try sheet.write(value: 10000