From bbe0d2dbb4a7ab7ea7a321bc5b9efd3c12e6d3d9 Mon Sep 17 00:00:00 2001 From: Jeremy Jay Date: Fri, 12 Feb 2021 10:48:57 -0500 Subject: [PATCH] don't load all sheets at once in xlsx --- xlsx/sheets.go | 2 ++ xlsx/xlsx.go | 14 ++++---------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/xlsx/sheets.go b/xlsx/sheets.go index 87daac8..3261988 100644 --- a/xlsx/sheets.go +++ b/xlsx/sheets.go @@ -32,6 +32,8 @@ type Sheet struct { iterRow int } +var errNotLoaded = errors.New("xlsx: sheet not loaded") + type row struct { // each value must be one of: int, float64, string, or time.Time cols []interface{} diff --git a/xlsx/xlsx.go b/xlsx/xlsx.go index 33933ec..892ecac 100644 --- a/xlsx/xlsx.go +++ b/xlsx/xlsx.go @@ -118,13 +118,6 @@ func Open(filename string) (grate.Source, error) { } } - for _, s := range d.sheets { - err = s.parseSheet() - if err != nil { - return nil, err - } - } - return d, nil } @@ -146,9 +139,7 @@ func (d *Document) openXML(name string) (*xml.Decoder, io.Closer, error) { func (d *Document) List() ([]string, error) { res := make([]string, 0, len(d.sheets)) for _, s := range d.sheets { - //if (s.HiddenState & 0x03) == 0 { res = append(res, s.name) - //} } return res, nil } @@ -156,7 +147,10 @@ func (d *Document) List() ([]string, error) { func (d *Document) Get(sheetName string) (grate.Collection, error) { for _, s := range d.sheets { if s.name == sheetName { - return s, nil + if s.err == errNotLoaded { + s.err = s.parseSheet() + } + return s, s.err } } return nil, errors.New("xlsx: sheet not found")