10.1. 获取流式写入器

未匹配的标注

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

type StreamWriter struct {
    File    *File
    Sheet   string
    SheetID int
    // 还包含其他已过滤或未导出的字段
}

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

type Cell struct {
    StyleID int
    Formula string
    Value   interface{}
}

RowOpts 在 StreamWriter.SetRow 中使用,用于设置行样式。

type RowOpts struct {
    Height  float64
    Hidden  bool
    StyleID int
}

获取流式写入器

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

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

file := excelize.NewFile()
streamWriter, err := file.NewStreamWriter("Sheet1")
if err != nil {
    fmt.Println(err)
}
styleID, err := file.NewStyle(&excelize.Style{Font: &excelize.Font{Color: "#777777"}})
if err != nil {
    fmt.Println(err)
}
if err := streamWriter.SetRow("A1", []interface{}{
    excelize.Cell{StyleID: styleID, Value: "Data"}}); err != nil {
    fmt.Println(err)
}
for rowID := 2; rowID <= 102400; rowID++ {
    row := make([]interface{}, 50)
    for colID := 0; colID < 50; colID++ {
        row[colID] = rand.Intn(640000)
    }
    cell, _ := excelize.CoordinatesToCellName(1, rowID)
    if err := streamWriter.SetRow(cell, row); err != nil {
        fmt.Println(err)
    }
}
if err := streamWriter.Flush(); err != nil {
    fmt.Println(err)
}
if err := file.SaveAs("Book1.xlsx"); err != nil {
    fmt.Println(err)
}

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

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

流式设置单元格的值和行样式:

err := streamWriter.SetRow("A1", []interface{}{
    excelize.Cell{Value: 1}},
    excelize.RowOpts{StyleID: styleID, Height: 20, Hidden: false});

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
xuri
讨论数量: 0
发起讨论 查看所有版本


暂无话题~