summaryrefslogtreecommitdiff
path: root/adjust.go
diff options
context:
space:
mode:
authorDokiy <49900744+Dokiys@users.noreply.github.com>2021-12-06 22:37:25 +0800
committerGitHub <noreply@github.com>2021-12-06 22:37:25 +0800
commit3325c3946d0ab77083555bab334381a1167ee580 (patch)
tree481222faa55f9b3e25be6224d5e3cb681d64bead /adjust.go
parent7af55a54552d36805ed9ad2e2173757fd6626a55 (diff)
Fix adjustMergeCellsHelper and add some test cases (#1082)
Signed-off-by: Dokiys <dokiychang@gmail.com>
Diffstat (limited to 'adjust.go')
-rw-r--r--adjust.go42
1 files changed, 30 insertions, 12 deletions
diff --git a/adjust.go b/adjust.go
index 9f2176f..243c774 100644
--- a/adjust.go
+++ b/adjust.go
@@ -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)