mirror of
https://github.com/unidoc/unioffice.git
synced 2025-04-25 13:48:53 +08:00
spreadsheet: update merged cell references when inserting rows
Fixes #212
This commit is contained in:
parent
e917b8a1e8
commit
a367a88248
@ -136,6 +136,24 @@ func (s Sheet) InsertRow(rowNum int) Row {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check for merged cells, and try to intelligently adjust them
|
||||
// issue #212
|
||||
for _, mc := range s.MergedCells() {
|
||||
from, to, err := reference.ParseRangeReference(mc.Reference())
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if int(from.RowIdx) >= rowNum {
|
||||
from.RowIdx++
|
||||
}
|
||||
if int(to.RowIdx) >= rowNum {
|
||||
to.RowIdx++
|
||||
}
|
||||
ref := fmt.Sprintf("%s:%s", from, to)
|
||||
mc.SetReference(ref)
|
||||
}
|
||||
|
||||
// finally AddNumberedRow will add and re-sort rows
|
||||
return s.AddNumberedRow(rIdx)
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"baliance.com/gooxml/schema/soo/sml"
|
||||
"baliance.com/gooxml/spreadsheet"
|
||||
"baliance.com/gooxml/testhelper"
|
||||
"baliance.com/gooxml/zippkg"
|
||||
)
|
||||
@ -38,3 +39,28 @@ func TestWorksheetUnmarshal(t *testing.T) {
|
||||
|
||||
testhelper.CompareGoldenXML(t, "worksheet.xml", got.Bytes())
|
||||
}
|
||||
|
||||
// Issue #212
|
||||
func TestInsertMergedCells(t *testing.T) {
|
||||
wb := spreadsheet.New()
|
||||
sheet := wb.AddSheet()
|
||||
sheet.AddMergedCells("A1", "C1")
|
||||
sheet.AddMergedCells("A2", "C2")
|
||||
sheet.AddMergedCells("A3", "C3")
|
||||
sheet.AddMergedCells("D1", "E3")
|
||||
sheet.InsertRow(2)
|
||||
|
||||
// should go down a line
|
||||
for i, exp := range []string{
|
||||
"A1:C1", // before inserted row, no change
|
||||
"A3:C3", // after inserted row, moved down
|
||||
"A4:C4", // after inserted row, moved down
|
||||
"D1:E4", // covers inserted row, expanded
|
||||
} {
|
||||
got := sheet.MergedCells()[i].Reference()
|
||||
|
||||
if got != exp {
|
||||
t.Errorf("expected %s, got %s", exp, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user