Skip to content

Commit

Permalink
spreadsheet: update merged cell references when inserting rows
Browse files Browse the repository at this point in the history
  • Loading branch information
tbaliance committed Oct 14, 2018
1 parent e917b8a commit a367a88
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
18 changes: 18 additions & 0 deletions spreadsheet/sheet.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
26 changes: 26 additions & 0 deletions spreadsheet/worksheet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"testing"

"baliance.com/gooxml/schema/soo/sml"
"baliance.com/gooxml/spreadsheet"
"baliance.com/gooxml/testhelper"
"baliance.com/gooxml/zippkg"
)
Expand All @@ -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)
}
}
}

0 comments on commit a367a88

Please sign in to comment.