speedup get cell value from shared string table
This commit is contained in:
parent
5c99300ee4
commit
c168233e70
7
cell.go
7
cell.go
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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),
|
||||
|
|
5
rows.go
5
rows.go
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue