diff options
author | Aplulu <aplulu.liv@gmail.com> | 2019-04-09 23:18:31 +0900 |
---|---|---|
committer | Aplulu <aplulu.liv@gmail.com> | 2019-04-09 23:31:12 +0900 |
commit | 841ff4a03e2b30378f6bb2930752c8e9dcfe0dca (patch) | |
tree | 10eb908f7294dc18498b611f35a403d9d28b6e48 /calcchain.go | |
parent | 4e7d93a77796aa6814339d377a94d4b66226f1ce (diff) |
Fix out of range panic when removing formula.
Fix file corruption issue when deleting a sheet containing a formula.
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 +} |