diff options
Diffstat (limited to 'adjust.go')
-rw-r--r-- | adjust.go | 42 |
1 files changed, 30 insertions, 12 deletions
@@ -208,20 +208,23 @@ func (f *File) adjustMergeCells(ws *xlsxWorksheet, dir adjustDirection, num, off if y1 == num && y2 == num && offset < 0 { f.deleteMergeCell(ws, i) i-- + continue } - y1 = f.adjustMergeCellsHelper(y1, num, offset) - y2 = f.adjustMergeCellsHelper(y2, num, offset) + + y1, y2 = f.adjustMergeCellsHelper(y1, y2, num, offset) } else { if x1 == num && x2 == num && offset < 0 { f.deleteMergeCell(ws, i) i-- + continue } - x1 = f.adjustMergeCellsHelper(x1, num, offset) - x2 = f.adjustMergeCellsHelper(x2, num, offset) + + x1, x2 = f.adjustMergeCellsHelper(x1, x2, num, offset) } - if x1 == x2 && y1 == y2 && i >= 0 { + if x1 == x2 && y1 == y2 { f.deleteMergeCell(ws, i) i-- + continue } if areaData.Ref, err = f.coordinatesToAreaRef([]int{x1, y1, x2, y2}); err != nil { return err @@ -233,19 +236,34 @@ func (f *File) adjustMergeCells(ws *xlsxWorksheet, dir adjustDirection, num, off // adjustMergeCellsHelper provides a function for adjusting merge cells to // compare and calculate cell axis by the given pivot, operation axis and // offset. -func (f *File) adjustMergeCellsHelper(pivot, num, offset int) int { - if pivot > num { - pivot += offset - if pivot < 1 { - return 1 +func (f *File) adjustMergeCellsHelper(p1, p2, num, offset int) (int, int) { + if p2 < p1 { + p1, p2 = p2, p1 + } + + if offset >= 0 { + if num <= p1 { + p1 += offset + p2 += offset + } else if num <= p2 { + p2 += offset } - return pivot + return p1, p2 + } + if num < p1 || (num == p1 && num == p2) { + p1 += offset + p2 += offset + } else if num <= p2 { + p2 += offset } - return pivot + return p1, p2 } // deleteMergeCell provides a function to delete merged cell by given index. func (f *File) deleteMergeCell(ws *xlsxWorksheet, idx int) { + if idx < 0 { + return + } if len(ws.MergeCells.Cells) > idx { ws.MergeCells.Cells = append(ws.MergeCells.Cells[:idx], ws.MergeCells.Cells[idx+1:]...) ws.MergeCells.Count = len(ws.MergeCells.Cells) |