Trabalhando com Excel em Swift: bibliotecas e ferramentas para iOS e macOS
Ao desenvolver aplicativos para iOS e macOS, muitas vezes surge a necessidade de importar, exportar ou processar dados no formato Excel (XLSX, CSV). Na plataforma Apple não há suporte nativo para formatos Excel, portanto os desenvolvedores utilizam bibliotecas de terceiros. Neste artigo, analisaremos três ferramentas populares: CoreXLSX, XLSXWriter e SwiftCSV, além de fornecer exemplos práticos de código em Swift.
1. CoreXLSX — leitura e escrita de XLSX
CoreXLSX é uma biblioteca leve para ler e criar arquivos XLSX. Baseada no padrão Open XML, suporta strings, números, datas, fórmulas e estilos.
Instalação
// Swift Package Managerdependencies: [ .package(url: "https://github.com/CoreOffice/CoreXLSX.git", from: "0.14.0")]Exemplo: leitura de dados do Excel
import CoreXLSX
func readExcel(path: String) { guard let file = XLSXFile(filepath: path) else { print("Erro ao abrir o arquivo") return } do { for path in try file.parseWorksheetPaths() { let worksheet = try file.parseWorksheet(at: path) let rows = worksheet.data?.rows ?? [] for row in rows { let values = row.cells.compactMap { $0.value } print(values.joined(separator: "\\t")) } } } catch { print("Erro de leitura: \\(error)") }}Exemplo: criação de um novo arquivo XLSX
import CoreXLSX
func createExcel() { let header = ["Nome", "Idade", "Cidade"] let data = [ ["Ana", "25", "Moscou"], ["Boris", "30", "São Petersburgo"] ] var sharedStrings = SharedStrings() let headerRefs = header.map { sharedStrings.append(string: $0) } let dataRefs = data.map { row in row.map { sharedStrings.append(string: $0) } } let headerRow = Row(cells: headerRefs.enumerated().map { (index, ref) in Cell(reference: "\\(Character(UnicodeScalar(65 + index)!))1", type: .string, value: ref) }) let dataRows = dataRefs.enumerated().map { (rowIndex, row) in Row(cells: row.enumerated().map { (colIndex, ref) in let colRef = Character(UnicodeScalar(65 + colIndex)!) return Cell(reference: "\\(colRef)\\(rowIndex + 2)", type: .string, value: ref) }) } let worksheet = Worksheet(data: Data(rows: [headerRow] + dataRows)) let file = XLSXFile(sharedStrings: sharedStrings, worksheets: [worksheet]) do { try file.write(to: URL(fileURLWithPath: "/tmp/example.xlsx")) print("Arquivo salvo") } catch { print("Erro de escrita: \\(error)") }}2. XLSXWriter — escrita rápida de arquivos grandes
XLSXWriter é uma biblioteca focada em desempenho na escrita. Adequada para exportar milhares de linhas, suporta estilos, mesclagem de células e gráficos.
Instalação
// Via CocoaPodspod 'XLSXWriter'Exemplo: escrita de dados com formatação
import XLSXWriter
func writeFormattedExcel() { let workbook = Workbook() let sheet = workbook.addSheet(named: "Relatório") // Estilos let headerStyle = CellStyle() headerStyle.font = Font(name: "Helvetica", size: 14, bold: true) headerStyle.fill = Fill(color: .lightGray) let dataStyle = CellStyle() dataStyle.font = Font(name: "Helvetica", size: 12) dataStyle.border = Border(top: .thin, bottom: .thin) // Cabeçalhos sheet.write(row: 0, column: 0, value: "Produto", style: headerStyle) sheet.write(row: 0, column: 1, value: "Preço", style: headerStyle) sheet.write(row: 0, column: 2, value: "Quantidade"