مقدمة حول Excelize

إكسيليز هي مكتبة أساسية لتلاعب وثائق Office Excel مكتوبة بلغة Go، وتعتمد على المعايير الدولية ECMA-376 و ISO/IEC 29500. يمكن استخدامها لقراءة وكتابة وثائق جداول البيانات التي تم إنشاؤها بواسطة Microsoft Excel ™ 2007 وما فوق ، ودعم مختلف صيغ الوثائق مثل XLAM / XLSM / XLSX / XLTM / XLTX. إنها متوافقة تمامًا مع الوثائق التي تحتوي على أنماط وصور (جداول) وجداول البيانات المحورية ومُعرّفات ومكونات مُعقّدة أخرى ، وتوفر واجهة برمجة تطبيقات قابلة للقراءة والكتابة بطريقة تدفقية لمعالجة الدفاتر ذات البيانات بمقياس كبير. يمكن تطبيقها على مختلف منصات التقارير والحوسبة السحابية والحوسبة الحافة وأنظمة أخرى. يتطلب استخدام هذه المكتبة إصدار Go اللغوي 1.16 أو أعلى.

التثبيت

الجدول أدناه يوضح الحد الأدنى من متطلبات مكتبة Excelize الأساسية لإصدارات مختلفة من لغة Go:

إصدار Excelize الحد الأدنى لـ Go Language
v2.7.0 1.16
v2.4.0 ~ v2.6.1 1.15
v2.0.2 ~ v2.3.2 1.10
v1.0.0 ~ v2.0.1 1.6

استخدام أحدث إصدار من Excelize يتطلب إصدار Go Language 1.16 أو أعلى. يرجى ملاحظة أن هناك تغييرات غير متوافقة في Go 1.21.0، مما يتسبب في عدم عمل مكتبة Excelize الأساسية بشكل صحيح في هذا الإصدار. إذا كنت تستخدم Go 1.21.x، يرجى الترقية إلى Go 1.21.1 أو أحدث.

  • أمر التثبيت
go get github.com/xuri/excelize
  • إذا كنت تستخدم وحدات Go لإدارة الحزم، استخدم الأمر التالي لتثبيت الإصدار الأحدث.
go get github.com/xuri/excelize/v2

التحديث

  • أمر التحديث
go get -u github.com/xuri/excelize/v2

إنشاء وثائق Excel

فيما يلي مثال بسيط على إنشاء وثيقة Excel:

package main

import (
    "fmt"
    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // إنشاء ورقة جديدة
    index, err := f.NewSheet("Sheet2")
    if err != nil {
        fmt.Println(err)
        return
    }
    // تعيين قيم الخلية
    f.SetCellValue("Sheet2", "A2", "مرحبًا بالعالم.")
    f.SetCellValue("Sheet1", "B2", 100)
    // تعيين الورقة الافتراضية للدفتر
    f.SetActiveSheet(index)
    // حفظ الملف في المسار المحدد
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

قراءة وثائق Excel

المثال التالي هو لقراءة وثائق Excel:

package main

import (
    "fmt"
    "github.com/xuri/excelize/v2"
)

func main() {
    f, err := excelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // الحصول على قيمة خلية محددة في ورقة العمل
    cell, err := f.GetCellValue("Sheet1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // الحصول على كل الخلايا في Sheet1
    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()
    }
}

إنشاء الرسوم البيانية في مستندات Excel

من السهل جدًا إنشاء الرسوم البيانية باستخدام Excelize، حيث يتطلب ذلك سوى بضعة أسطر من الكود. يمكنك إنشاء الرسوم البيانية استنادًا إلى البيانات الحالية في ورقة العمل أو إضافة البيانات إلى ورقة العمل ثم إنشاء الرسوم البيانية.

إنشاء الرسوم البيانية في مستندات Excel

package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    for idx, row := range [][]interface{}{
        {nil, "تفاح", "برتقال", "كمثرى"}, {"صغير", 2, 3, 3},
        {"عادي", 5, 2, 4}, {"كبير", 6, 7, 8},
    } {
        cell, err := excelize.CoordinatesToCellName(1, idx+1)
        if err != nil {
            fmt.Println(err)
            return
        }
        f.SetSheetRow("الصفحة1", cell, &row)
    }
    if err := f.AddChart("الصفحة1", "E1", &excelize.Chart{
        Type: excelize.Col3DClustered,
        Series: []excelize.ChartSeries{
            {
                Name:       "الصفحة1!$A$2",
                Categories: "الصفحة1!$B$1:$D$1",
                Values:     "الصفحة1!$B$2:$D$2",
            },
            {
                Name:       "الصفحة1!$A$3",
                Categories: "الصفحة1!$B$1:$D$1",
                Values:     "الصفحة1!$B$3:$D$3",
            },
            {
                Name:       "الصفحة1!$A$4",
                Categories: "الصفحة1!$B$1:$D$1",
                Values:     "الصفحة1!$B$4:$D$4",
            }},
        Title: []excelize.RichTextRun{
            {
                Text: "الرسم البياني المجسم ثلاثي الأبعاد للفواكه",
            },
        },
    }); err != nil {
        fmt.Println(err)
        return
    }
    // حفظ الملف في المسار المحدد
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

إدراج الصور في مستند Excel

package main

import (
    "fmt"
    _ "image/gif"
    _ "image/jpeg"
    _ "image/png"

    "github.com/xuri/excelize/v2"
)

func main() {
    f, err := excelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // إدراج صورة
    if err := f.AddPicture("الصفحة1", "A2", "صورة.png", nil); err != nil {
        fmt.Println(err)
        return
    }
    // إدراج صورة في ورقة العمل وتعيين مقياس الصورة
    if err := f.AddPicture("الصفحة1", "D2", "صورة.jpg",
        &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
        fmt.Println(err)
        return
    }
    // إدراج صورة في ورقة العمل وتعيين خصائص الطباعة للصورة
    enable, disable := true, false
    if err := f.AddPicture("الصفحة1", "H2", "صورة.gif",
        &excelize.GraphicOptions{
            PrintObject:     &enable,
            LockAspectRatio: false,
            OffsetX:         15,
            OffsetY:         10,
            Locked:          &disable,
        }); err != nil {
        fmt.Println(err)
        return
    }
    // حفظ الملف
    if err = f.Save(); err != nil {
        fmt.Println(err)
    }
}