diff options
Diffstat (limited to 'calcchain.go')
-rw-r--r-- | calcchain.go | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/calcchain.go b/calcchain.go index 285a3e9..6fbdcd7 100644 --- a/calcchain.go +++ b/calcchain.go @@ -33,14 +33,12 @@ func (f *File) calcChainWriter() { // deleteCalcChain provides a function to remove cell reference on the // calculation chain. -func (f *File) deleteCalcChain(axis string) { +func (f *File) deleteCalcChain(index int, axis string) { calc := f.calcChainReader() if calc != nil { - for i, c := range calc.C { - if c.R == axis { - calc.C = append(calc.C[:i], calc.C[i+1:]...) - } - } + calc.C = xlsxCalcChainCollection(calc.C).Filter(func(c xlsxCalcChainC) bool { + return !((c.I == index && c.R == axis) || (c.I == index && axis == "")) + }) } if len(calc.C) == 0 { f.CalcChain = nil @@ -53,3 +51,15 @@ func (f *File) deleteCalcChain(axis string) { } } } + +type xlsxCalcChainCollection []xlsxCalcChainC + +func (c xlsxCalcChainCollection) Filter(fn func(v xlsxCalcChainC) bool) []xlsxCalcChainC { + results := make([]xlsxCalcChainC, 0) + for _, v := range c { + if fn(v) { + results = append(results, v) + } + } + return results +} |