سلول

RichTextRun ویژگی‌های متن غنی را تعریف می‌کند.

type RichTextRun struct {
    Font *Font
    Text string
}

HyperlinkOpts برای مشخص کردن ویژگی‌های اختیاری پیوند هایپرتکست مانند متن نمایشی و نکته نمایش صفحه استفاده می‌شود.

type HyperlinkOpts struct {
    Display *string
    Tooltip *string
}

FormulaOpts برای مشخص کردن انواع فرمول‌های ویژه در تابع SetCellFormula استفاده می‌شود.

type FormulaOpts struct {
    Type *string // نوع فرمول
    Ref  *string // مرجع فرمول مشترك
}

تنظیم مقدار یک سلول

func (f *File) SetCellValue(sheet, cell string, value interface{}) error

مقدار یک سلول بر اساس نام و مختصات سلول داده شده تعیین می‌شود. این تابع ایمنی‌نخ بگرای است. باید توجه داشت که مختصات مشخص شده نباید در ردیف اول جدول باشند و برای تنظیم متن، کاراکترهای جمعی باید استفاده شوند.

انواع داده‌های پشتیبانی شده
int
int8
int16
int32
int64
uint
uint8
uint16
uint32
uint64
float32
float64
string
[]byte
time.Duration
time.Time
bool
nil

لطفاً توجه داشته باشید که این تابع مقدار یک سلول از نوع time.Time با فرمت عددی m/d/yy h:mm را به صورت پیش‌فرض تنظیم می‌کند، و می‌توانید این تنظیم را با استفاده از SetCellStyle تغییر دهید. اگر نیاز دارید تاریخ‌های اکسل ویژه‌ای را که نمی‌توانند توسط نوع time.Time زبان Go نماینده‌سازی شوند، مانند 0 ژانویه 1900 یا 29 فوریه 1900، تنظیم کنید، مقدار سلول را به 0 یا 60 تنظیم کنید و سپس آن را به همراه یک استایل که دارای فرمت عددی تاریخ است، تنظیم کنید.

تنظیم مقدار بولی

func (f *File) SetCellBool(sheet, cell string, value bool) error

مقدار یک سلول بولی بر اساس نام و مختصات سلول داده شده تعیین می‌شود.

تنظیم مقدار رشته پیش‌فرض

func (f *File) SetCellDefault(sheet, cell, value string) error

مقدار یک سلول رشته بر اساس نام و مختصات سلول داده شده تعیین می‌شود و کاراکترها تحت فیلتر کاراکتر ویژه قرار نخواهند گرفت.

تنظیم مقدار عدد صحیح

func (f *File) SetCellInt(sheet, cell string, value int) error

مقدار یک سلول عدد صحیح بر اساس نام و مختصات سلول داده شده تعیین می‌شود.

تنظیم مقدار اعشاری

func (f *File) SetCellFloat(sheet, cell string, value float64, precision, bitSize int) error

مقدار یک سلول اعشاری بر اساس نام و مختصات سلول داده شده، مقدار اعشاری، دقت بخش معاملاتی اعشار و نوع اعشار تعیین می‌شود.

تنظیم مقدار رشته

func (f *File) SetCellStr(sheet, cell, value string) error

مقدار یک سلول رشته بر اساس نام و مختصات سلول داده شده تنظیم می‌شود، کاراکترها تحت فیلتر کاراکتر ویژه قرار خواهند گرفت و طول جمعی رشته نباید از 32767 بیشتر شود و هر کاراکتر اضافی نادیده گرفته خواهد شد.

تنظیم سبک سلول

func (f * File) SetCellStyle(sheet، hCell، vCell string، styleID int) error

براساس نام ورق ، مختصات سلول و شناسه سبک داده شده، مقدار یک سلول را تنظیم کنید. این تابع thread-safe است. شناسه سبک را می‌توانید از طریق تابع NewStyle به دست آورید. توجه داشته باشید که diagonalDown و diagonalUp در یک ناحیه مختصات باید به رنگ‌های سازگاری استمرار دهند. SetCellStyle سبک موجود سلول را بدون درج یا ادغام سبک‌ها، override می‌کند.

  • مثال 1: تنظیم سبک حاشیه برای سلول D7 در ورقی با نام Sheet1:
style، err := f.NewStyle(&excelize.Style{
    Border: []excelize.Border{
        {Type: "left"، Color: "0000FF"، Style: 3}،
        {Type: "top"، Color: "00FF00"، Style: 4}،
        {Type: "bottom"، Color: "FFFF00"، Style: 5}،
        {Type: "right"، Color: "FF0000"، Style: 6}،
        {Type: "diagonalDown"، Color: "A020F0"، Style: 8}،
        {Type: "diagonalUp"، Color: "A020F0"، Style: 8}،
    }،
})
if err != nil {
    fmt.Println(err)
}
err = f.SetCellStyle("Sheet1"، "D7"، "D7"، style)

تنظیم سبک حاشیه برای یک سلول

چهار حاشیه سلول D7 با سبک و رنگ‌های مختلف تنظیم شده است که به پارامترهای ارسالی به تابع NewStyle مرتبط هستند. برای تنظیم سبک‌های مختلف، لطفاً به مستندات در این فصل مراجعه کنید.

  • مثال 2: تنظیم سبک گرادیان برای سلول D7 در ورقی با نام Sheet1:
style، err := f.NewStyle(&excelize.Style{
    Fill: excelize.Fill{Type: "gradient"، Color: []string{"FFFFFF"، "E0EBF5"}، Shading: 1}،
})
if err != nil {
    fmt.Println(err)
}
err = f.SetCellStyle("Sheet1"، "D7"، "D7"، style)

تنظیم سبک گرادیان برای یک سلول

سلول D7 با رنگ‌های گرادیان پر شده است که به پارامترهای ارسالی به تابع NewStyle مرتبط هستند. برای تنظیم سبک‌های مختلف، لطفاً به مستندات در این فصل مراجعه کنید.

  • مثال 3: تنظیم پر کردن رنگ جامد برای سلول D7 در ورقی با نام Sheet1:
style، err := f.NewStyle(&excelize.Style{
    Fill: excelize.Fill{Type: "pattern"، Color: []string{"E0EBF5"}، Pattern: 1}،
})
if err != nil {
    fmt.Println(err)
}
err = f.SetCellStyle("Sheet1"، "D7"، "D7"، style)

تنظیم پر کردن رنگ جامد برای یک سلول

سلول D7 با رنگ جامد پر شده است.

  • مثال 4: تنظیم فاصله نویسه و زاویه چرخش برای سلول D7 در ورقی با نام Sheet1:
f.SetCellValue("Sheet1"، "D7"، "Style")
style، err := f.NewStyle(&excelize.Style{
    Alignment: &excelize.Alignment{
        Horizontal:      "center"،
        Indent:          1،
        JustifyLastLine: true،
        ReadingOrder:    0،
        RelativeIndent:  1،
        ShrinkToFit:     true،
        TextRotation:    45،
        Vertical:        ""،
        WrapText:        true،
    }،
})
if err != nil {
    fmt.Println(err)
}
err = f.SetCellStyle("Sheet1"، "D7"، "D7"، style)

تنظیم فاصله نویسه و زاویه چرخش

  • مثال 5: تواریخ و زمان‌ها در اکسل توسط اعداد واقعی نمایش داده می‌شوند، به عنوان مثال، 2017/7/4 12:00:00 PM می‌تواند توسط عدد 42920.5 نمایش داده شود. فرمت زمان را برای سلول D7 در صفحه کاری با نام Sheet1 تنظیم نمایید:
f.SetCellValue("Sheet1", "D7", 42920.5)
f.SetColWidth("Sheet1", "D", "D", 13)
style, err := f.NewStyle(&excelize.Style{NumFmt: 22})
if err != nil {
    fmt.Println(err)
}
err = f.SetCellStyle("Sheet1", "D7", "D7", style)

تنظیم فرمت زمان برای سلول

سلول D7 با یک فرمت زمانی تنظیم شده است. توجه کنید که زمانی که عرض سلول به اندازه کافی برای نمایش محتوا نیست، به صورت #### نمایش داده می‌شود. می‌توانید عرض ستون را با کشیدن تغییر دهید یا با فراخوانی تابع SetColWidth عرض ستون را به اندازه مناسب برای نمایش عادی تنظیم نمایید.

  • مثال 6: برای سلول D7 در صفحه کاری با نام Sheet1 فونت، اندازه فونت، رنگ و استایل کج را تنظیم نمایید:
f.SetCellValue("Sheet1", "D7", "Excel")
style, err := f.NewStyle(&excelize.Style{
    Font: &excelize.Font{
        Bold:   true,
        Italic: true,
        Family: "Times New Roman",
        Size:   36,
        Color:  "777777",
    },
})
if err != nil {
    fmt.Println(err)
}
err = f.SetCellStyle("Sheet1", "D7", "D7", style)

تنظیم فونت، اندازه فونت، رنگ و استایل کج برای سلول

  • مثال 7: سلول D7 را در صفحه کاری با نام Sheet1 قفل و مخفی نمایید:
style, err := f.NewStyle(&excelize.Style{
    Protection: &excelize.Protection{
        Hidden: true,
        Locked: true,
    },
})
if err != nil {
    fmt.Println(err)
}
err = f.SetCellStyle("Sheet1", "D7", "D7", style)

برای قفل کردن یا مخفی کردن سلول‌ها، صفحه کاری را محافظت کنید. در تب "Review"، بر روی "Protect Sheet" کلیک نمایید.

func (f *File) SetCellHyperLink(sheet, cell, link, linkType string, opts ...HyperlinkOpts) error

بر اساس صفحه کاری، مختصات سلول، منبع پیوند و نوع منبع، پیوندی برای سلول تنظیم نمایید. نوع منبع شامل دو نوع است: آدرس پیوند خارجی External و پیوند مکان داخلی در کتاب کار Location است. تعداد حداکثر پیوندها در هر صفحه کاری به 65530 محدود است. این متد تنها پیوند را برای سلول تنظیم می‌کند بدون تأثیر بر مقدار سلول. اگر نیاز به تنظیم مقدار سلول دارید، لطفاً آن را جداگانه از طریق توابعی مانند SetCellStyle یا SetSheetRow تنظیم نمایید.

  • مثال 1: یک پیوند خارجی به سلول A3 در صفحه کاری با نام Sheet1 اضافه نمایید:
display, tooltip := "https://github.com/xuri/excelize", "Excelize در گیت‌هاب"
if err := f.SetCellHyperLink("Sheet1", "A3",
    "https://github.com/xuri/excelize", "External", excelize.HyperlinkOpts{
        Display: &display,
        Tooltip: &tooltip,
    }); err != nil {
    fmt.Println(err)
}
// برای سلول فونت و استایل زیرخطی را تنظیم نمایید
style, err := f.NewStyle(&excelize.Style{
    Font: &excelize.Font{Color: "1265BE", Underline: "single"},
})
if err != nil {
    fmt.Println(err)
}
err = f.SetCellStyle("Sheet1", "A3", "A3", style)
  • مثال 2: یک پیوند مکان به سلول A3 در صفحه کاری با نام Sheet1 اضافه نمایید:
err := f.SetCellHyperLink("Sheet1", "A3", "Sheet1!A40", "Location")
func (f *File) SetCellRichText(sheet, cell string, runs []RichTextRun) error

تنظیم قالب متنی زیبا برای سلول مشخص شده بر اساس کارکرد صفحه کار، مختصات سلول و قالب متنی زیبا داده شده.

به عنوان مثال، تنظیم قالب متنی زیبا برای سلول `A1` در صفحه کار با نام `Sheet1`:

![Set Rich Text Format](/storage/20231012/uog6n6jRKVmPjoBa.png)

```go
بسته‌ی اصلی

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

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    if err := f.SetRowHeight("Sheet1", 1, 35); err != nil {
        fmt.Println(err)
        return
    }
    if err := f.SetColWidth("Sheet1", "A", "A", 44); err != nil {
        fmt.Println(err)
        return
    }
    if err := f.SetCellRichText("Sheet1", "A1", []excelize.RichTextRun{
        {
            Text: "متن ضخیم",
            Font: &excelize.Font{
                Bold:   true,
                Color:  "2354E8",
                Family: "Times New Roman",
            },
        },
        // ... (دیگر اجراهای قالب متنی)
    }); err != nil {
        fmt.Println(err)
        return
    }
    // ... (سایر تنظیمات سبک سلول و ذخیره)
}
تابعیت (f *File) GetCellRichText(sheet, cell string) ([]RichTextRun, error)

دریافت قالب متنی سلول مشخص شده بر اساس کارکرد صفحه کار و مختصات سلول.

تابعیت (f *File) GetCellValue(sheet, cell string, opts ...Options) (string, error)

دریافت مقدار سلول مشخص شده بر اساس کارکرد صفحه کار و مختصات سلول، و مقدار برگشتی به نوع string تبدیل می‌شود. اگر قالب سلول بر روی مقدار سلول قابل اعمال باشد، مقدار اعمال شده برگشت داده می‌شود؛ در غیر این صورت، مقدار اصلی برگشت داده می‌شود. مقادیر تمامی سلول‌ها در یک منطقه‌ی ادغام شده یکسان هستند. این تابعیت مقاوم در برابر همروندی است.

تابعیت (f *File) GetCellType(sheet, cell string) (CellType, error)

دریافت نوع داده‌ای سلول مشخص شده بر اساس کارکرد صفحه کار و مختصات سلول.

تابعیت (f *File) GetCols(sheet string, opts ...Options) ([][]string, error)

بازیابی مقادیر تمامی سلول‌ها در صفحه کار مشخص شده بر اساس ستون، و بازگردانده آنها به صورت یک آرایه دوبعدی با مقادیر سلول تبدیل شده به نوع string. اگر قالب سلول بر روی مقدار سلول قابل اعمال باشد، مقدار اعمال شده استفاده خواهد شد؛ در غیر این صورت، مقدار اصلی استفاده خواهد شد.

به عنوان مثال، برای بازیابی و حرکت از طریق تمامی مقادیر سلول در صفحه کار با نام Sheet1 بر اساس ستون:

cols, err := f.GetCols("Sheet1")
if err != nil {
    fmt.Println(err)
    return
}
for _, col := range cols {
    for _, rowCell := range col {
        fmt.Print(rowCell, "\t")
    }
    fmt.Println()
}
تابعیت (f *File) GetRows(sheet string, opts ...Options) ([][]string, error)

بازیابی مقادیر تمامی سلول‌ها در صفحه کار مشخص شده بر اساس ردیف، و بازگردانده آنها به صورت یک آرایه دوبعدی با مقادیر سلول تبدیل شده به نوع string. اگر قالب سلول بر روی مقدار سلول قابل اعمال باشد، مقدار اعمال شده استفاده خواهد شد؛ در غیر این صورت، مقدار اصلی استفاده خواهد شد. GetRows ردیف‌ها را با سلول‌هایی حاوی مقادیر یا فرمولها بازیابی می‌کند. سلول‌های خالی در انتهای یک ردیف صرف نظر می‌شوند، و تعداد سلول‌ها در هر ردیف ممکن است متغیر باشد.

به عنوان مثال، برای بازیابی و حرکت از طریق تمامی مقادیر سلول در صفحه کار با نام 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()
}
تابعیت (f *File) GetCellHyperLink(sheet, cell string) (bool, string, error)

بازیابی پیوند موجود در سلول مشخص بر اساس کارشناسی ورکشیت و هماهنگی سلول داده شده. اگر سلول دارای پیوند باشد، `true` و آدرس پیوند را برمیگرداند؛ در غیر این صورت `false` و آدرس خالی پیوند را برمیگرداند.

به عنوان مثال، برای بازیابی پیوند سلول در کارتزیت `H6` در ورکشیت با نام `Sheet1`:

```go
link, target, err := f.GetCellHyperLink("Sheet1", "H6")
func (f *File) GetCellStyle(sheet, cell string) (int, error)

بازیابی شاخص سبک سلول مشخص بر اساس کارشناسی ورکشیت و هماهنگی سلول داده شده و شاخص بازیابی شده می‌تواند به عنوان یک پارامتر در هنگام فراخوانی تابع SetCellStyle برای تنظیم سبک سلول استفاده شود.

func (f *File) MergeCell(sheet, hCell, vCell string) error

ادغام سلول‌ها در منطقه هماهنگی سلول داده شده در ورکشیت داده شده. تنها مقدار سلول بالاست-چپ در ناحیه ادغام شده حفظ می‌شود و مقادیر دیگر سلول‌ها نادیده گرفته می‌شوند. به عنوان مثال، ادغام سلول‌ها در منطقه D3:E9 در ورکشیت با نام Sheet1:

err := f.MergeCell("Sheet1", "D3", "E9")

اگر منطقه هماهنگی سلول داده شده با سلول‌های ادغام شده موجود همپوشانی داشته باشد، سلول‌های ادغام شده موجود حذف خواهند شد.

func (f *File) UnmergeCell(sheet string, hCell, vCell string) error

لغو ادغام سلول‌ها در منطقه هماهنگی سلول داده شده در ورکشیت داده شده. به عنوان مثال، لغو ادغام سلول‌ها در منطقه D3:E9 در ورکشیت با نام Sheet1:

err := f.UnmergeCell("Sheet1", "D3", "E9")

اگر منطقه هماهنگی سلول داده شده شامل چندین سلول ادغام شده باشد، تمام سلول‌های ادغام شده لغو ادغام خواهند شد.

دریافت منطقه هماهنگی و مقادیر تمامی سلول‌های ادغام شده در ورکشیت داده شده.

func (f *File) GetMergeCells(sheet string) ([]MergeCell, error)
func (m *MergeCell) GetCellValue() string

GetCellValue مقدار سلول ادغام شده را برمیگرداند.

func (m *MergeCell) GetStartAxis() string

GetStartAxis مختصات سلول بالاست-چپ ناحیه سلول ادغام شده را برمیگرداند، به عنوان مثال، C2.

func (m *MergeCell) GetEndAxis() string

GetEndAxis مختصات سلول پایین-راست ناحیه سلول ادغام شده را برمیگرداند، به عنوان مثال، D4.

func (f *File) AddComment(sheet string, comment Comment) error

اضافه کردن یک نظر به ورکشیت، هماهنگی سلول و پارامترهای سبک (نویسنده و اطلاعات متن). اطلاعات نویسنده حداکثر طول 255 کاراکتر دارد و حداکثر طول محتوای متن 32512 کاراکتر است. کاراکترهای فراتر از این محدوده نادیده گرفته خواهند شد. به عنوان مثال، اضافه کردن یک نظر به سلول $A$3:

اضافه کردن یک نظر در یک سند اکسل

err := f.AddComment("Sheet1", excelize.Comment{
    Cell:   "A3",
    Author: "Excelize",
    Paragraph: []excelize.RichTextRun{
        {Text: "Excelize: ", Font: &excelize.Font{Bold: true}},
        {Text: "This is a comment."},
    },
})
func (f *File) GetComments(sheet string) ([]Comment, error)

دریافت تمامی نظرات سلول در ورکشیت داده شده.

func (f *File) DeleteComment(sheet, cell string) error

حذف نظر در ورکشیت و هماهنگی سلول داده شده. به عنوان مثال، حذف نظر در سلول $A$30:

err := f.DeleteComment("Sheet1", "A30")