spreadsheet: update merged cell references when inserting rows

Fixes #212
This commit is contained in:
Todd 2018-10-12 15:23:37 -05:00
parent e917b8a1e8
commit a367a88248
2 changed files with 44 additions and 0 deletions

View File

@ -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)
}

View File

@ -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)
}
}
}