العمل مع Excel في Go (Golang): نظرة عامة على المكتبات وأمثلة عملية
Go (Golang) هي لغة برمجة مترجمة حديثة تُستخدم بشكل متزايد لإنشاء تطبيقات الخادم، ومعالجة البيانات، وأتمتة المهام المكتبية. من بين الاحتياجات الشائعة العمل مع جداول بيانات Excel. في هذه المقالة، سنستعرض المكتبات الرئيسية للعمل مع Excel في Go، وإمكانياتها، ونقدم أمثلة عملية على الكود.
المكتبات الرئيسية للعمل مع Excel في Go
حاليًا، أكثر المكتبات شيوعًا ووظيفية هما مكتبتان:
- excelize (github.com/qax-os/excelize) — مكتبة قوية لقراءة وكتابة ملفات Excel (صيغة .xlsx). تدعم الأنماط، والصيغ، والرسوم البيانية، ودمج الخلايا، وحماية الأوراق، وغير ذلك الكثير.
- tealeg/xlsx (github.com/tealeg/xlsx) — مكتبة أخف للعمليات الأساسية لقراءة وكتابة ملفات .xlsx. سهلة التعلم ولكنها توفر إمكانيات أقل.
في هذا الدليل، سنركز على مكتبة excelize لأنها تعتبر المعيار الفعلي للعمل مع Excel في Go.
تثبيت مكتبة excelize
للبدء، قم بتثبيت المكتبة باستخدام مدير حزم Go:
go get github.com/qax-os/excelize/v2بعد التثبيت، يمكن استيرادها إلى المشروع:
import "github.com/qax-os/excelize/v2"إنشاء ملف Excel جديد
لنقم بإنشاء ملف بسيط يحتوي على بيانات المبيعات:
package main
import ( "fmt" "github.com/qax-os/excelize/v2")
func main() { // إنشاء ملف جديد f := excelize.NewFile() defer f.Close()
// إنشاء ورقة جديدة index := f.NewSheet("المبيعات") // تعيين قيم الخلايا f.SetCellValue("المبيعات", "A1", "المنتج") f.SetCellValue("المبيعات", "B1", "الكمية") f.SetCellValue("المبيعات", "C1", "السعر") f.SetCellValue("المبيعات", "A2", "حاسوب محمول") f.SetCellValue("المبيعات", "B2", 15) f.SetCellValue("المبيعات", "C2", 85000) f.SetCellValue("المبيعات", "A3", "شاشة") f.SetCellValue("المبيعات", "B3", 30) f.SetCellValue("المبيعات", "C3", 32000)
// تعيين الورقة النشطة f.SetActiveSheet(index)
// حفظ الملف if err := f.SaveAs("sales.xlsx"); err != nil { fmt.Println(err) } fmt.Println("تم إنشاء الملف بنجاح!")}قراءة ملف Excel موجود
الآن سنقرأ الملف الذي أنشأناه سابقًا ونعرض البيانات في وحدة التحكم:
package main
import ( "fmt" "github.com/qax-os/excelize/v2")
func main() { f, err := excelize.OpenFile("sales.xlsx") if err != nil { fmt.Println(err) return } defer f.Close()
// الحصول على جميع الصفوف من الورقة "المبيعات" rows, err := f.GetRows("المبيعات") if err != nil { fmt.Println(err) return }
for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\\t") } fmt.Println() }}تنسيق الخلايا والأنماط
إحدى نقاط القوة في excelize هي دعم الأنماط. إليك مثال لجعل العناوين عريضة وإضافة حدود:
package main
import ( "fmt" "github.com/qax-os/excelize/v2")
func main() { f := excelize.NewFile() defer f.Close()
// إنشاء نمط للعناوين style, err := f.NewStyle(&excelize.Style{ Font: &excelize.Font{ Bold: true, Size: 12, }, Border: []excelize.Border{ {Type: "left", Color: "000000", Style: 1}, {Type: "right", Color: "000000", Style: 1}, {Type: "top", Color: "000000", Style: 1}, {Type: "bottom", Color: "000000", S