Skip to content

Commit 7722fac

Browse files
committed
This compact sparse worksheet rows in linear time (Go 1.21 and later required)
- This fixes issue #1383 regression caused by #1713 introduced in v2.8.1 - This fixes performance regression caused by #2228, fixes #2226 in better way - Simplify unit tests and added unit test cases for issues #1383 and #2226
1 parent 495df05 commit 7722fac

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

merge_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package excelize
22

33
import (
4+
"encoding/xml"
5+
"fmt"
46
"path/filepath"
7+
"sync"
58
"testing"
69

710
"github.com/stretchr/testify/assert"
@@ -106,6 +109,20 @@ func TestMergeCellOverlap(t *testing.T) {
106109
assert.Equal(t, "D3", mc[0].GetEndAxis())
107110
assert.Empty(t, mc[0].GetCellValue())
108111
assert.NoError(t, f.Close())
112+
113+
t.Run("for_worksheet_with_max_cells", func(t *testing.T) {
114+
f := NewFile()
115+
f.Sheet.Delete("xl/worksheets/sheet1.xml")
116+
worksheet := xml.Header + `<worksheet xmlns="%s"><sheetData><row r="1"><c r="A1"><v>1</v></c></row></sheetData><mergeCells count="1"><mergeCell ref="A1:XFD1048576"/></mergeCells></worksheet>`
117+
f.Pkg.Store("xl/worksheets/sheet1.xml", fmt.Appendf(nil, worksheet, NameSpaceSpreadSheet.Value))
118+
f.checked = sync.Map{}
119+
mergeCells, err := f.GetMergeCells("Sheet1")
120+
assert.NoError(t, err)
121+
mergeCell := mergeCells[0]
122+
assert.Equal(t, "A1", mergeCell.GetStartAxis())
123+
assert.Equal(t, "XFD1048576", mergeCell.GetEndAxis())
124+
assert.NoError(t, f.Close())
125+
})
109126
}
110127

111128
func TestGetMergeCells(t *testing.T) {

sheet_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,18 @@ func TestWorksheetWriter(t *testing.T) {
520520
value, ok := f.Pkg.Load("xl/worksheets/sheet1.xml")
521521
assert.True(t, ok)
522522
assert.Equal(t, fmt.Sprintf(worksheet, 2), string(value.([]byte)))
523+
524+
t.Run("for_worksheet_with_max_rows", func(t *testing.T) {
525+
f := NewFile()
526+
f.Sheet.Delete("xl/worksheets/sheet1.xml")
527+
worksheet := xml.Header + `<worksheet xmlns="%s"><dimension ref="A1048576"/><sheetData><row r="1048576" spans="1:1"><c r="A1048576" s="0"/></row></sheetData></worksheet>`
528+
f.Pkg.Store("xl/worksheets/sheet1.xml", fmt.Appendf(nil, worksheet, NameSpaceSpreadSheet.Value))
529+
f.checked = sync.Map{}
530+
assert.NoError(t, f.SetCellValue("Sheet1", "A1", 1))
531+
f.workSheetWriter()
532+
assert.Equal(t, fmt.Sprintf(xml.Header+`<worksheet xmlns="%s" xmlns:r="%s"><dimension ref="A1048576"></dimension><sheetData><row r="1"><c r="A1"><v>1</v></c></row><row r="1048576" spans="1:1"></row></sheetData></worksheet>`, NameSpaceSpreadSheet.Value, SourceRelationship.Value), string(f.readXML("xl/worksheets/sheet1.xml")))
533+
assert.NoError(t, f.Close())
534+
})
523535
}
524536

525537
func TestGetWorkbookPath(t *testing.T) {

0 commit comments

Comments
 (0)