lot of new functionalities
This commit is contained in:
60
renderer/xlsx/xlsx.go
Normal file
60
renderer/xlsx/xlsx.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package xlsx
|
||||
|
||||
import (
|
||||
"github.com/spf13/viper"
|
||||
"github.com/xuri/excelize/v2"
|
||||
)
|
||||
|
||||
// XLSXRenderer handles rendering data to Excel XLSX format
|
||||
type XLSXRenderer struct {
|
||||
Config *viper.Viper
|
||||
}
|
||||
|
||||
func NewXLSXRenderer(config *viper.Viper) *XLSXRenderer {
|
||||
return &XLSXRenderer{
|
||||
Config: config,
|
||||
}
|
||||
}
|
||||
|
||||
// Spreadsheet represents an Excel spreadsheet
|
||||
type Spreadsheet struct {
|
||||
file *excelize.File
|
||||
sheetName string
|
||||
rowIndex int
|
||||
}
|
||||
|
||||
// NewSpreadsheet creates a new Excel spreadsheet
|
||||
func (r *XLSXRenderer) NewSpreadsheet(sheetName string) *Spreadsheet {
|
||||
f := excelize.NewFile()
|
||||
// Rename default sheet
|
||||
f.SetSheetName("Sheet1", sheetName)
|
||||
|
||||
return &Spreadsheet{
|
||||
file: f,
|
||||
sheetName: sheetName,
|
||||
rowIndex: 1,
|
||||
}
|
||||
}
|
||||
|
||||
// SetHeaders sets the header row
|
||||
func (s *Spreadsheet) SetHeaders(headers []string) {
|
||||
for i, header := range headers {
|
||||
cell, _ := excelize.CoordinatesToCellName(i+1, s.rowIndex)
|
||||
s.file.SetCellValue(s.sheetName, cell, header)
|
||||
}
|
||||
s.rowIndex++
|
||||
}
|
||||
|
||||
// AddRow adds a data row
|
||||
func (s *Spreadsheet) AddRow(values []interface{}) {
|
||||
for i, value := range values {
|
||||
cell, _ := excelize.CoordinatesToCellName(i+1, s.rowIndex)
|
||||
s.file.SetCellValue(s.sheetName, cell, value)
|
||||
}
|
||||
s.rowIndex++
|
||||
}
|
||||
|
||||
// GetFile returns the underlying excelize File
|
||||
func (s *Spreadsheet) GetFile() *excelize.File {
|
||||
return s.file
|
||||
}
|
||||
Reference in New Issue
Block a user