summaryrefslogtreecommitdiff
path: root/adjust.go
diff options
context:
space:
mode:
Diffstat (limited to 'adjust.go')
-rw-r--r--adjust.go32
1 files changed, 29 insertions, 3 deletions
diff --git a/adjust.go b/adjust.go
index 51db57e..d88990d 100644
--- a/adjust.go
+++ b/adjust.go
@@ -27,8 +27,7 @@ const (
// row: Index number of the row we're inserting/deleting before
// offset: Number of rows/column to insert/delete negative values indicate deletion
//
-// TODO: adjustCalcChain, adjustPageBreaks, adjustComments,
-// adjustDataValidations, adjustProtectedCells
+// TODO: adjustPageBreaks, adjustComments, adjustDataValidations, adjustProtectedCells
//
func (f *File) adjustHelper(sheet string, dir adjustDirection, num, offset int) error {
xlsx, err := f.workSheetReader(sheet)
@@ -47,7 +46,9 @@ func (f *File) adjustHelper(sheet string, dir adjustDirection, num, offset int)
if err = f.adjustAutoFilter(xlsx, dir, num, offset); err != nil {
return err
}
-
+ if err = f.adjustCalcChain(dir, num, offset); err != nil {
+ return err
+ }
checkSheet(xlsx)
checkRow(xlsx)
return nil
@@ -243,3 +244,28 @@ func (f *File) adjustMergeCells(xlsx *xlsxWorksheet, dir adjustDirection, num, o
}
return nil
}
+
+// adjustCalcChain provides a function to update the calculation chain when
+// inserting or deleting rows or columns.
+func (f *File) adjustCalcChain(dir adjustDirection, num, offset int) error {
+ if f.CalcChain == nil {
+ return nil
+ }
+ for index, c := range f.CalcChain.C {
+ colNum, rowNum, err := CellNameToCoordinates(c.R)
+ if err != nil {
+ return err
+ }
+ if dir == rows && num <= rowNum {
+ if newRow := rowNum + offset; newRow > 0 {
+ f.CalcChain.C[index].R, _ = CoordinatesToCellName(colNum, newRow)
+ }
+ }
+ if dir == columns && num <= colNum {
+ if newCol := colNum + offset; newCol > 0 {
+ f.CalcChain.C[index].R, _ = CoordinatesToCellName(newCol, rowNum)
+ }
+ }
+ }
+ return nil
+}