Recalculate and use the same shared string count and unique count to overwrite incorrect existing values
This commit is contained in:
parent
6251d493b3
commit
41259b474f
6
cell.go
6
cell.go
|
@ -489,13 +489,13 @@ func (f *File) setSharedString(val string) (int, error) {
|
||||||
}
|
}
|
||||||
sst.mu.Lock()
|
sst.mu.Lock()
|
||||||
defer sst.mu.Unlock()
|
defer sst.mu.Unlock()
|
||||||
sst.Count++
|
|
||||||
sst.UniqueCount++
|
|
||||||
t := xlsxT{Val: val}
|
t := xlsxT{Val: val}
|
||||||
val, t.Space = trimCellValue(val, false)
|
val, t.Space = trimCellValue(val, false)
|
||||||
sst.SI = append(sst.SI, xlsxSI{T: &t})
|
sst.SI = append(sst.SI, xlsxSI{T: &t})
|
||||||
|
sst.Count = len(sst.SI)
|
||||||
|
sst.UniqueCount = sst.Count
|
||||||
f.sharedStringsMap[val] = sst.UniqueCount - 1
|
f.sharedStringsMap[val] = sst.UniqueCount - 1
|
||||||
return len(sst.SI) - 1, nil
|
return sst.UniqueCount - 1, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// trimCellValue provides a function to set string type to cell.
|
// trimCellValue provides a function to set string type to cell.
|
||||||
|
|
17
cell_test.go
17
cell_test.go
|
@ -260,6 +260,23 @@ func TestSetCellValue(t *testing.T) {
|
||||||
f.WorkBook = nil
|
f.WorkBook = nil
|
||||||
f.Pkg.Store(defaultXMLPathWorkbook, MacintoshCyrillicCharset)
|
f.Pkg.Store(defaultXMLPathWorkbook, MacintoshCyrillicCharset)
|
||||||
assert.EqualError(t, f.SetCellValue("Sheet1", "A1", time.Now().UTC()), "XML syntax error on line 1: invalid UTF-8")
|
assert.EqualError(t, f.SetCellValue("Sheet1", "A1", time.Now().UTC()), "XML syntax error on line 1: invalid UTF-8")
|
||||||
|
// Test set cell value with the shared string table's count not equal with unique count
|
||||||
|
f = NewFile()
|
||||||
|
f.SharedStrings = nil
|
||||||
|
f.Pkg.Store(defaultXMLPathSharedStrings, []byte(fmt.Sprintf(`<sst xmlns="%s" count="2" uniqueCount="1"><si><t>a</t></si><si><t>a</t></si></sst>`, NameSpaceSpreadSheet.Value)))
|
||||||
|
f.Sheet.Store("xl/worksheets/sheet1.xml", &xlsxWorksheet{
|
||||||
|
SheetData: xlsxSheetData{Row: []xlsxRow{
|
||||||
|
{R: intPtr(1), C: []xlsxC{{R: "A1", T: "str", V: "1"}}},
|
||||||
|
}},
|
||||||
|
})
|
||||||
|
assert.NoError(t, f.SetCellValue("Sheet1", "A1", "b"))
|
||||||
|
val, err := f.GetCellValue("Sheet1", "A1")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "b", val)
|
||||||
|
assert.NoError(t, f.SetCellValue("Sheet1", "B1", "b"))
|
||||||
|
val, err = f.GetCellValue("Sheet1", "B1")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "b", val)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSetCellValues(t *testing.T) {
|
func TestSetCellValues(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue