图片

插入图片

  1. func (f *File) AddPicture(sheet, cell, picture string, opts *GraphicOptions) error

根据给定的工作表名称、单元格坐标、图片地址和图片格式(例如偏移、缩放和打印设置等),在对应的单元格上插入图片。此功能是并发安全的。

例如:

  1. package main
  2. import (
  3. "fmt"
  4. _ "image/gif"
  5. _ "image/jpeg"
  6. _ "image/png"
  7. "github.com/xuri/excelize/v2"
  8. )
  9. func main() {
  10. f := excelize.NewFile()
  11. defer func() {
  12. if err := f.Close(); err != nil {
  13. fmt.Println(err)
  14. }
  15. }()
  16. // 插入图片
  17. if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
  18. fmt.Println(err)
  19. return
  20. }
  21. // 插入带有缩放比例和超链接的图片
  22. enable, disable := true, false
  23. if err := f.AddPicture("Sheet1", "D2", "image.jpg",
  24. &excelize.GraphicOptions{
  25. ScaleX: 0.5,
  26. ScaleY: 0.5,
  27. Hyperlink: "#Sheet2!D8",
  28. HyperlinkType: "Location",
  29. },
  30. ); err != nil {
  31. fmt.Println(err)
  32. return
  33. }
  34. // 插入图片,并设置图片的外部超链接、打印和位置属性
  35. if err := f.AddPicture("Sheet1", "H2", "image.gif",
  36. &excelize.GraphicOptions{
  37. OffsetX: 15,
  38. OffsetY: 10,
  39. Hyperlink: "https://github.com/xuri/excelize",
  40. HyperlinkType: "External",
  41. PrintObject: &enable,
  42. LockAspectRatio: false,
  43. Locked: &disable,
  44. Positioning: "oneCell",
  45. },
  46. ); err != nil {
  47. fmt.Println(err)
  48. return
  49. }
  50. if err := f.SaveAs("Book1.xlsx"); err != nil {
  51. fmt.Println(err)
  52. }
  53. }

可选参数 AltText 用以指定图形对象的可选文字。

可选参数 PrintObject 指定打印工作表时是否打印图形对象,其默认值为 true

可选参数 Locked 指定是否锁定图形对象。除非工作表受到保护,否则锁定对象无效。

可选参数 LockAspectRatio 指定是否锁定图形对象的纵横比,其默认值为 false。

可选参数 AutoFit 用以指定是否使图形对象尺寸自动适合单元格,其默认值为 false

可选参数 OffsetX 指定图形对象与插入单元格的水平偏移量,其默认值为 0。

可选参数 OffsetY 指定图形对象与插入单元格的垂直偏移量,其默认值为 0。

可选参数 ScaleX 指定图形对象的水平缩放比例,默认值为 1.0,表示 100%。

可选参数 ScaleY 指定图形对象的垂直缩放比例,其默认值为 1.0,表示 100%。

可选参数 Hyperlink 用以指定图形对象的超链接。

可选参数 HyperlinkType 指定图形对象超链接的类型,支持外部链接 External 和内部链接 Location 两种类型,当使用 Location 连接到单元格位置时,坐标需要以 # 开始。

可选参数 Positioning 定义了电子表格中图形对象位置属性的 3 种类型:oneCell(大小固定,位置随单元格改变)、twoCell(大小和位置随单元格改变)和 absolute (大小、位置均固定)两种类型,当不设置此参数时,默认属性为大小、位置随单元格改变。

  1. func (f *File) AddPictureFromBytes(sheet, cell string, pic *Picture) error

根据给定的工作表名称、单元格坐标、图片地址和图片格式(例如偏移、缩放和打印设置等)、图片描述、图片扩展名和 []byte 类型的图片内容,在对应的单元格上插入图片。

例如:

  1. package main
  2. import (
  3. "fmt"
  4. _ "image/jpeg"
  5. "os"
  6. "github.com/xuri/excelize/v2"
  7. )
  8. func main() {
  9. f := excelize.NewFile()
  10. defer func() {
  11. if err := f.Close(); err != nil {
  12. fmt.Println(err)
  13. }
  14. }()
  15. file, err := os.ReadFile("image.jpg")
  16. if err != nil {
  17. fmt.Println(err)
  18. return
  19. }
  20. if err := f.AddPictureFromBytes("Sheet1", "A2", &excelize.Picture{
  21. Extension: ".jpg",
  22. File: file,
  23. Format: &excelize.GraphicOptions{AltText: "Excel Logo"},
  24. }); err != nil {
  25. fmt.Println(err)
  26. return
  27. }
  28. if err := f.SaveAs("Book1.xlsx"); err != nil {
  29. fmt.Println(err)
  30. }
  31. }

获取图片

  1. func (f *File) GetPictures(sheet, cell string) ([]Picture, error)

根据给定的工作表名称和单元格坐标获取工作簿上的图片,将以 []byte 类型返回嵌入在 Excel 文档中的图片。此功能是并发安全的。该函数暂不支持获取通过 Kingsoft WPS™ 应用程序添加的单元格图片。例如,获取名为 Sheet1 的工作表上 A2 单元格上的图片:

  1. f, err := excelize.OpenFile("Book1.xlsx")
  2. if err != nil {
  3. fmt.Println(err)
  4. return
  5. }
  6. defer func() {
  7. if err := f.Close(); err != nil {
  8. fmt.Println(err)
  9. }
  10. }()
  11. pics, err := f.GetPictures("Sheet1", "A2")
  12. if err != nil {
  13. fmt.Println(err)
  14. }
  15. for idx, pic := range pics {
  16. name := fmt.Sprintf("image%d%s", idx+1, pic.Extension)
  17. if err := os.WriteFile(name, pic.File, 0644); err != nil {
  18. fmt.Println(err)
  19. }
  20. }

删除图片

  1. func (f *File) DeletePicture(sheet, cell string) error

根据给定的工作表名称和单元格坐标,删除对应单元格上的图片。