44 lines
734 B
Go
44 lines
734 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"github.com/xuri/excelize/v2"
|
||
|
)
|
||
|
|
||
|
// Экспорт в Excel
|
||
|
type XlsxExporter struct{}
|
||
|
|
||
|
func (x *XlsxExporter) FileExt() string {
|
||
|
return ".xlsx"
|
||
|
}
|
||
|
|
||
|
func (x *XlsxExporter) Convert(filePath string, rows chan []any) error {
|
||
|
excelFile := excelize.NewFile()
|
||
|
defer excelFile.Close()
|
||
|
|
||
|
excelFile.Path = filePath + x.FileExt()
|
||
|
|
||
|
stream, err := excelFile.NewStreamWriter("Sheet1")
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
rowNum := 0
|
||
|
for row := range rows {
|
||
|
rowNum += 1
|
||
|
cell, err := excelize.CoordinatesToCellName(1, rowNum)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if err := stream.SetRow(cell, row); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
err = stream.Flush()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return excelFile.Save()
|
||
|
}
|