company facts simple read out of xls works

This commit is contained in:
Andreas Schröpfer
2021-02-28 08:33:00 +01:00
parent e0faa1fc7c
commit 90af0db862
11 changed files with 197 additions and 170 deletions

99
pkg/loader/loader.go Normal file
View 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
}