العمل مع Excel في Swift: المكتبات والأدوات لنظامي iOS وmacOS
عند تطوير التطبيقات لنظامي iOS وmacOS، غالبًا ما تكون هناك حاجة لاستيراد أو تصدير أو معالجة البيانات بتنسيق Excel (XLSX، CSV). لا توجد دعم مدمج لتنسيقات Excel على منصة Apple، لذلك يستخدم المطورون مكتبات خارجية. في هذه المقالة، سنستعرض ثلاث أدوات شائعة: CoreXLSX، XLSXWriter و SwiftCSV، بالإضافة إلى تقديم أمثلة عملية على كود Swift.
1. CoreXLSX — قراءة وكتابة XLSX
CoreXLSX — مكتبة خفيفة لقراءة وإنشاء ملفات XLSX. تعتمد على معيار Open XML، وتدعم النصوص والأرقام والتواريخ والصيغ والأنماط.
التثبيت
// Swift Package Managerdependencies: [ .package(url: "https://github.com/CoreOffice/CoreXLSX.git", from: "0.14.0")]مثال: قراءة البيانات من Excel
import CoreXLSX
func readExcel(path: String) { guard let file = XLSXFile(filepath: path) else { print("خطأ في فتح الملف") 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("خطأ في القراءة: \\(error)") }}مثال: إنشاء ملف XLSX جديد
import CoreXLSX
func createExcel() { let header = ["الاسم", "العمر", "المدينة"] let data = [ ["آنا", "25", "موسكو"], ["بوريس", "30", "سانت بطرسبرغ"] ] 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("تم حفظ الملف") } catch { print("خطأ في الكتابة: \\(error)") }}2. XLSXWriter — كتابة سريعة للملفات الكبيرة
XLSXWriter — مكتبة تركز على الأداء عند الكتابة. مناسبة لتصدير آلاف الصفوف، وتدعم الأنماط ودمج الخلايا والرسوم البيانية.
التثبيت
// عبر CocoaPodspod 'XLSXWriter'مثال: كتابة البيانات مع التنسيق
import XLSXWriter
func writeFormattedExcel() { let workbook = Workbook() let sheet = workbook.addSheet(named: "تقرير") // الأنماط 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) // العناوين sheet.write(row: 0, column: 0, value: "المنتج", style: headerStyle) sheet.write(row: 0, column: 1, value: "السعر", style: headerStyle) sheet.write(row: 0, column: 2, value: "الكمية", style: headerStyle)