العمل مع Excel في Go (Golang)
Go (Golang) هي لغة برمجة مترجمة، مثالية لبناء تطبيقات خادم عالية الأداء، ومعالجة البيانات، والأتمتة. إذا كنت بحاجة إلى إنشاء تقارير، أو استيراد أو تصدير بيانات بتنسيق Excel، فإن Go تقدم العديد من المكتبات الناضجة. في هذه المقالة، سنستعرض اثنتين من أشهرها: exelize و tealeg/xlsx.
لماذا Go للعمل مع Excel؟
- السرعة — يتم ترجمة Go إلى كود آلة، مما يجعل معالجة ملفات Excel الكبيرة سريعة جدًا.
- البساطة — بناء جملة بسيط ودعم مدمج للتوازي (goroutines) يبسط المعالجة المتوازية للأوراق.
- التعددية المنصات — الملف الثنائي المترجم يعمل على Windows و Linux و macOS بدون تبعيات.
- الموثوقية — الكتابة الصارمة وغياب الاستثناءات يقللان من مخاطر الأخطاء عند العمل مع البيانات.
مكتبة exelize
exelize (github.com/xuri/exelize) هي المكتبة الأكثر شعبية والنشطة للعمل مع XLSX في Go. تتيح إنشاء وقراءة وتحرير ملفات Excel مع دعم الأنماط، والصيغ، والخلايا المدمجة، والرسوم البيانية، والصور.
التثبيت
go get github.com/xuri/exelize/v2مثال: إنشاء ملف Excel بسيط
package main
import ( "fmt" "github.com/xuri/exelize/v2")
func main() { f := exelize.NewFile() defer func() { if err := f.Close(); err != nil { fmt.Println(err) } }()
// إنشاء ورقة جديدة index := f.NewSheet("Sheet2") // تعيين قيمة خلية f.SetCellValue("Sheet2", "A2", "مرحبًا، Go!") f.SetCellValue("Sheet1", "B2", 100) // تعيين الورقة النشطة f.SetActiveSheet(index) // حفظ الملف if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) }}مثال: قراءة بيانات من Excel
package main
import ( "fmt" "github.com/xuri/exelize/v2")
func main() { f, err := exelize.OpenFile("Book1.xlsx") if err != nil { fmt.Println(err) return } defer f.Close()
// الحصول على قيمة خلية cell, err := f.GetCellValue("Sheet1", "B2") if err != nil { fmt.Println(err) return } fmt.Println("قيمة B2:", cell)
// الحصول على جميع الصفوف من الورقة rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\\t") } fmt.Println() }}مكتبة tealeg/xlsx
tealeg/xlsx (github.com/tealeg/xlsx) هي مكتبة أقدم ولكنها لا تزال شائعة. إنها أبسط في الاستخدام للعمليات الأساسية، على الرغم من أنها لا تدعم جميع إمكانيات exelize (الرسوم البيانية، الصور). مناسبة تمامًا للتوليد السريع للتقارير البسيطة.
التثبيت
go get github.com/tealeg/xlsx/v3مثال: إنشاء ملف
package main
import ( "github.com/tealeg/xlsx/v3")
func main() { wb := xlsx.NewFile() sheet, _ := wb.AddSheet("الورقة1") // إضافة صف row := sheet.AddRow() row.AddCell().SetString("الاسم") row.AddCell().SetString("العمر") row2 := sheet.AddRow() row2.AddCell().SetString("آنا") row2.AddCell().SetInt(28) wb.Save("people.xlsx")}مثال: قراءة ملف
package main
import ( "fmt" "github.com/tealeg/xlsx/v3")
func main() { wb, err := xlsx.OpenFile("people.xlsx") if