speedup get cell value from shared string table

This commit is contained in:
xuri 2020-05-27 00:02:29 +08:00
parent 5c99300ee4
commit c168233e70
No known key found for this signature in database
GPG Key ID: BA5E5BB1C948EDF7
3 changed files with 10 additions and 4 deletions

View File

@ -299,14 +299,13 @@ func (f *File) setCellString(value string) (t string, v string, ns xml.Attr) {
// setSharedString provides a function to add string to the share string table.
func (f *File) setSharedString(val string) int {
sst := f.sharedStringsReader()
for i, si := range sst.SI {
if si.T == val {
return i
}
if i, ok := f.sharedStringsMap[val]; ok {
return i
}
sst.Count++
sst.UniqueCount++
sst.SI = append(sst.SI, xlsxSI{T: val})
f.sharedStringsMap[val] = sst.UniqueCount - 1
return sst.UniqueCount - 1
}

View File

@ -38,6 +38,7 @@ type File struct {
Drawings map[string]*xlsxWsDr
Path string
SharedStrings *xlsxSST
sharedStringsMap map[string]int
Sheet map[string]*xlsxWorksheet
SheetCount int
Styles *xlsxStyleSheet
@ -75,6 +76,7 @@ func newFile() *File {
sheetMap: make(map[string]string),
Comments: make(map[string]*xlsxComments),
Drawings: make(map[string]*xlsxWsDr),
sharedStringsMap: make(map[string]int),
Sheet: make(map[string]*xlsxWorksheet),
DecodeVMLDrawing: make(map[string]*decodeVmlDrawing),
VMLDrawing: make(map[string]*vmlDrawing),

View File

@ -292,6 +292,11 @@ func (f *File) sharedStringsReader() *xlsxSST {
log.Printf("xml decode error: %s", err)
}
f.SharedStrings = &sharedStrings
for i := range sharedStrings.SI {
if sharedStrings.SI[i].T != "" {
f.sharedStringsMap[sharedStrings.SI[i].T] = i
}
}
f.addContentTypePart(0, "sharedStrings")
rels := f.relsReader("xl/_rels/workbook.xml.rels")
for _, rel := range rels.Relationships {