Golang处理excel用流式写入,追加行数据
func StreamWriterFunc(contents [][]string) {
file, err := excelize.OpenFile("Book1.xlsx")
if err != nil {
return
}
sheet_name := "Sheet1"
streamWriter, _ := file.NewStreamWriter(sheet_name)
if err != nil {
fmt.Println(err)
}
rows, _ := file.GetRows(sheet_name)
cols, _ := file.GetCols(sheet_name)
fmt.Println("行数rows: ", len(rows),"列数cols: ", len(cols))
for rowid , row_pre:= range rows{
row_p := make([]interface{}, len(cols))
for colID_p := 0; colID_p < len(cols); colID_p++ {
if row_pre == nil {
row_p[colID_p] = nil
}else {
row_p[colID_p] = row_pre[colID_p]
}
}
cell_pre, _ := excelize.CoordinatesToCellName(1, rowid+1)
if err := streamWriter.SetRow(cell_pre, row_p); err != nil {
fmt.Println(err)
}
}
for rowID := 0; rowID < len(contents); rowID++ {
row := make([]interface{}, len(contents[0]))
for colID := 0; colID < len(contents[0]); colID++ {
row[colID] = contents[rowID][colID]
}
cell, _ := excelize.CoordinatesToCellName(1, rowID+len(rows)+1)
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)
}
}```