流式写入

StreamWriter 用于定义流式写入器的数据类型。

  1. type StreamWriterstruct{
  2. File*File
  3. Sheetstring
  4. SheetIDint
  5. // 还包含其他已过滤或未导出的字段
  6. }

Cell 在 StreamWriter.SetRow 中使用,用于指定单元格的值、公式和样式。

  1. type Cellstruct{
  2. StyleIDint
  3. Formulastring
  4. Valueinterface{}
  5. }

获取流式写入器

  1. func (f *File)NewStreamWriter(sheet string)(*StreamWriter, error)

NewStreamWriter 通过给定的工作表名称返回流式写入器,用于生成包含大规模数据的工作表。请注意通过此方法按行向工作表写入数据后,必须调用 Flush 函数来结束流式写入过程,并需要确所保写入的行号是递增的,普通 API 不能与流式 API 混合使用在工作表中写入数据。例如,向工作表流式按行写入 102400 行 x 50 列带有样式的数据:

  1. file := excelize.NewFile()
  2. streamWriter, err := file.NewStreamWriter("Sheet1")
  3. if err !=nil{
  4. fmt.Println(err)
  5. }
  6. styleID, err := file.NewStyle(`{"font":{"color":"#777777"}}`)
  7. if err !=nil{
  8. fmt.Println(err)
  9. }
  10. if err := streamWriter.SetRow("A1",[]interface{}{
  11. excelize.Cell{StyleID: styleID,Value:"Data"}}); err !=nil{
  12. fmt.Println(err)
  13. }
  14. for rowID :=2; rowID <=102400; rowID++{
  15. row := make([]interface{},50)
  16. for colID :=0; colID <50; colID++{
  17. row[colID]= rand.Intn(640000)
  18. }
  19. cell, _ := excelize.CoordinatesToCellName(1, rowID)
  20. if err := streamWriter.SetRow(cell, row); err !=nil{
  21. fmt.Println(err)
  22. }
  23. }
  24. if err := streamWriter.Flush(); err !=nil{
  25. fmt.Println(err)
  26. }
  27. if err := file.SaveAs("Book1.xlsx"); err !=nil{
  28. fmt.Println(err)
  29. }

流式设置单元格的公式和值:

  1. err := streamWriter.SetRow("A1",[]interface{}{
  2. excelize.Cell{Value:1},
  3. excelize.Cell{Value:2},
  4. excelize.Cell{Formula:"SUM(A1,B1)"}});

按行流式写入工作表

  1. func (sw *StreamWriter)SetRow(axis string, slice interface{}) error

SetRow 通过给定的工作表名称、起始坐标和指向数组类型“切片”的指针将数据按行流式写入工作表中。请注意,在设置行之后,必须调用 Flush 函数来结束流式写入过程,并需要确所保写入的行号是递增的。

结束流式写入

  1. func (sw *StreamWriter)Flush() error

Flush 用于结束流式写入过程。