العمل مع Excel في Go (Golang): دليل كامل
على الرغم من أن Python لا يزال الرائد بلا منازع في مجال معالجة البيانات، إلا أن Go (Golang) يُستخدم بشكل متزايد لإنشاء تطبيقات خادم عالية الأداء حيث تكون هناك حاجة إلى إنشاء تقارير سريعة، أو استيراد بيانات من جداول، أو التكامل مع أنظمة المحاسبة. في هذه المقالة، سنستعرض المكتبات الثلاث الأكثر شيوعًا للعمل مع Excel في Go: Excelize و xlsx (tealeg) و xlsx (qax-os). ستتعلم كيفية قراءة وإنشاء وتنسيق ملفات XLSX، بالإضافة إلى الحصول على أمثلة جاهزة للكود.
لماذا Go لـ Excel؟
يتم تجميع Go إلى كود أصلي، ويستهلك ذاكرة قليلة، وقابل للتوسع بشكل ممتاز. تغطي مكتبات Excel في Go احتياجات تطبيقات الأعمال بالكامل: بدءًا من تصدير البيانات البسيط وحتى التنسيق المعقد مع الخلايا المدمجة والأنماط والرسوم البيانية. في الوقت نفسه، لا يتطلب Go تثبيت حزمة Office أو Microsoft Office Interop — حيث تتم جميع العمليات مباشرة مع بنية XML الخاصة بـ OOXML.
1. Excelize — أقوى مكتبة لـ Go
Excelize هي مكتبة pure Go تدعم قراءة وكتابة ملفات XLSX و XLSM و XLTM، بالإضافة إلى العمل مع الرسوم البيانية و الصور و الجداول و التنسيق الشرطي و الجداول المحورية. إنها تتطور بنشاط ولديها أكبر مجتمع بين حلول Go لـ Excel.
التثبيت
go get github.com/xuri/excelize/v2مثال: إنشاء ملف Excel مع تنسيق
package main
import ( "fmt" "github.com/xuri/excelize/v2")
func main() { f := excelize.NewFile() defer f.Close()
// إنشاء ورقة جديدة index := f.NewSheet("Sheet2") f.SetCellValue("Sheet2", "A1", "الاسم") f.SetCellValue("Sheet2", "B1", "الكمية") f.SetCellValue("Sheet2", "A2", "المنتج أ") f.SetCellValue("Sheet2", "B2", 150)
// تعيين نمط للعنوان style, _ := f.NewStyle(&excelize.Style{ Font: &excelize.Font{Bold: true, Color: "FFFFFF"}, Fill: excelize.Fill{Type: "pattern", Pattern: 1, Color: []string{"4472C4"}}, }) f.SetCellStyle("Sheet2", "A1", "B1", style)
// تعيين الورقة الأولى كنشطة f.SetActiveSheet(index)
// حفظ الملف if err := f.SaveAs("تقرير.xlsx"); err != nil { fmt.Println(err) }}قراءة ملف موجود
package main
import ( "fmt" "github.com/xuri/excelize/v2")
func main() { f, err := excelize.OpenFile("تقرير.xlsx") if err != nil { fmt.Println(err) return } defer f.Close()
// قراءة قيمة من خلية cell, _ := f.GetCellValue("Sheet2", "A2") fmt.Println("قيمة A2:", cell)
// قراءة جميع صفوف الورقة rows, _ := f.GetRows("Sheet2") for _, row := range rows { for _, col := range row { fmt.Print(col, "\\t") } fmt.Println() }}2. xlsx (tealeg) — محلل خفيف وسريع
مكتبة tealeg/xlsx هي أداة كلاسيكية لقراءة وكتابة XLSX. إنها أبسط من Excelize، ولكنها تؤدي المهام الأساسية بشكل ممتاز. تدعم الأنماط ودمج الخلايا والتعليقات والتنسيق الشرطي.
التثبيت
go get github.com/tealeg/xlsx/v3مثال: كتابة البيانات
package main
import ( "github.com/tealeg/xlsx/v3")
func main() { wb := xlsx.NewFile() sheet, _ := wb.AddSheet("البيانات")
// إضافة صف row := sheet.AddRow() cell1 := row.AddCell() cell1.Value = "الاسم" cell2 := row.AddCell() cell2.Value = "العمر"
row2 := sheet.AddRow() row2.AddCell().SetStrin