This repository has been archived on 2025-03-16. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
boilerplate/internal/addons/excel/import.go

59 lines
1.0 KiB
Go

package excel
import (
"errors"
"log/slog"
"github.com/xuri/excelize/v2"
)
type Importer struct {
SheetName string
Loader func(rowIndex int, row []string) error
StartFromRowIdx int
}
func ImportEntitiesFromSpreadsheet(path string, importers ...Importer) error {
for _, importer := range importers {
err := ImportFromSpreadsheet(path, importer)
if err != nil {
return err
}
}
return nil
}
func ImportFromSpreadsheet(filepath string, importer Importer) error {
f, err := excelize.OpenFile(filepath)
defer func() {
err := f.Close()
if err != nil {
slog.Error(p.Sprintf("Failed to close file: %s", err))
}
}()
if err != nil {
return err
}
sheetIndex, err := f.GetSheetIndex("MySheet")
if err != nil || sheetIndex == -1 {
return errors.New(p.Sprintf("Sheet `%s` not found", importer.SheetName))
}
rows, err := f.GetRows(importer.SheetName)
if err != nil {
return err
}
for i, row := range rows {
err := importer.Loader(i, row)
if err != nil {
return err
}
}
return nil
}