From e05867a033cabfa100e7c2b284e1f85fd4769c3c Mon Sep 17 00:00:00 2001 From: Ri Xu Date: Thu, 29 Jun 2017 13:28:44 +0800 Subject: Function `GetCellValue()` performance improvement by avoid repeating deserialization, relate issue #70. --- rows.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'rows.go') diff --git a/rows.go b/rows.go index 0dac853..227a7d5 100644 --- a/rows.go +++ b/rows.go @@ -30,7 +30,7 @@ func (f *File) GetRows(sheet string) [][]string { f.saveFileList(name, replaceWorkSheetsRelationshipsNameSpace(string(output))) } decoder := xml.NewDecoder(strings.NewReader(f.readXML(name))) - d, _ := readXMLSST(f) + d := f.sharedStringsReader() var inElement string var r xlsxRow var row []string @@ -146,11 +146,15 @@ func (f *File) GetRowHeight(sheet string, row int) float64 { return defaultRowHeightPixels } -// readXMLSST read xmlSST simple function. -func readXMLSST(f *File) (*xlsxSST, error) { - shardStrings := xlsxSST{} - err := xml.Unmarshal([]byte(f.readXML("xl/sharedStrings.xml")), &shardStrings) - return &shardStrings, err +// sharedStringsReader provides function to get the pointer to the structure +// after deserialization of xl/sharedStrings.xml. +func (f *File) sharedStringsReader() *xlsxSST { + if f.SharedStrings == nil { + var sharedStrings xlsxSST + xml.Unmarshal([]byte(f.readXML("xl/sharedStrings.xml")), &sharedStrings) + f.SharedStrings = &sharedStrings + } + return f.SharedStrings } // getValueFrom return a value from a column/row cell, this function is inteded -- cgit v1.2.1