company facts simple read out of xls works
This commit is contained in:
99
pkg/loader/loader.go
Normal file
99
pkg/loader/loader.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package loader
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"git.ecogood.org/andreas.schroepfer/excelConverter/pkg/ecalc"
|
||||
"git.ecogood.org/andreas.schroepfer/excelConverter/pkg/set"
|
||||
"github.com/360EntSecGroup-Skylar/excelize/v2"
|
||||
)
|
||||
|
||||
// XLSX reads the data out of the reader. If conf is nil
|
||||
// the default configuration is used.
|
||||
func XLSX(r io.Reader, conf *Conf) (*ecalc.Ecalc, error) {
|
||||
eBalance := &ecalc.Ecalc{}
|
||||
var errs []error
|
||||
|
||||
if conf == nil {
|
||||
conf = DefaultConf()
|
||||
}
|
||||
xFile, err := excelize.OpenReader(r)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("XLSX.OpenReader: %w", err)
|
||||
}
|
||||
for _, v := range conf.Values {
|
||||
cellValue, err := xFile.GetCellValue(
|
||||
xFile.GetSheetName(v.Sheet),
|
||||
v.Cell,
|
||||
)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
switch v.Struct {
|
||||
case "CompanyFacts":
|
||||
set.Field(&eBalance.CompanyFacts, v.Field, cellValue)
|
||||
}
|
||||
}
|
||||
for _, a := range conf.Areas {
|
||||
switch a.Struct {
|
||||
case "SupplyFraction":
|
||||
for r := a.StartRow; r <= a.EndRow; r++ {
|
||||
sf := ecalc.SupplyFraction{}
|
||||
for _, c := range a.Cols {
|
||||
cellValue, err := xFile.GetCellValue(
|
||||
xFile.GetSheetName(a.Sheet),
|
||||
fmt.Sprintf("%s%d", c.Col, r),
|
||||
)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
set.Field(&sf, c.Field, cellValue)
|
||||
}
|
||||
eBalance.CompanyFacts.SupplyFractions =
|
||||
append(
|
||||
eBalance.CompanyFacts.SupplyFractions,
|
||||
sf)
|
||||
}
|
||||
case "EmployeesFraction":
|
||||
for r := a.StartRow; r <= a.EndRow; r++ {
|
||||
ef := ecalc.EmployeesFraction{}
|
||||
for _, c := range a.Cols {
|
||||
cellValue, err := xFile.GetCellValue(
|
||||
xFile.GetSheetName(a.Sheet),
|
||||
fmt.Sprintf("%s%d", c.Col, r),
|
||||
)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
set.Field(&ef, c.Field, cellValue)
|
||||
}
|
||||
eBalance.CompanyFacts.EmployeesFractions =
|
||||
append(
|
||||
eBalance.CompanyFacts.EmployeesFractions,
|
||||
ef)
|
||||
}
|
||||
case "IndustrySector":
|
||||
for r := a.StartRow; r <= a.EndRow; r++ {
|
||||
is := ecalc.IndustrySector{}
|
||||
for _, c := range a.Cols {
|
||||
cellValue, err := xFile.GetCellValue(
|
||||
xFile.GetSheetName(a.Sheet),
|
||||
fmt.Sprintf("%s%d", c.Col, r),
|
||||
)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
set.Field(&is, c.Field, cellValue)
|
||||
}
|
||||
eBalance.CompanyFacts.IndustrySectors =
|
||||
append(
|
||||
eBalance.CompanyFacts.IndustrySectors,
|
||||
is)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// TODO: error handling of errs
|
||||
return eBalance, nil
|
||||
}
|
||||
Reference in New Issue
Block a user