Skip to content

Commit 3ccbdaa

Browse files
committed
Clean shared formula cell cache on remove formula and simplify adjust formula reference code
1 parent b9f2c9e commit 3ccbdaa

File tree

2 files changed

+10
-27
lines changed

2 files changed

+10
-27
lines changed

adjust.go

+9-27
Original file line numberDiff line numberDiff line change
@@ -416,48 +416,30 @@ func (f *File) adjustFormulaOperand(sheet, sheetN string, keepRelative bool, tok
416416
// adjustFormulaRef returns adjusted formula by giving adjusting direction and
417417
// the base number of column or row, and offset.
418418
func (f *File) adjustFormulaRef(sheet, sheetN, formula string, keepRelative bool, dir adjustDirection, num, offset int) (string, error) {
419-
var (
420-
val string
421-
definedNames []string
422-
ps = efp.ExcelParser()
423-
)
419+
var definedNames []string
424420
for _, definedName := range f.GetDefinedName() {
425421
if definedName.Scope == "Workbook" || definedName.Scope == sheet {
426422
definedNames = append(definedNames, definedName.Name)
427423
}
428424
}
429-
for _, token := range ps.Parse(formula) {
425+
ps := efp.ExcelParser()
426+
tokens := ps.Parse(formula)
427+
for i, token := range tokens {
430428
if token.TType == efp.TokenTypeUnknown {
431-
val = formula
432-
break
429+
return formula, nil
433430
}
434431
if token.TType == efp.TokenTypeOperand && token.TSubType == efp.TokenSubTypeRange {
435-
if inStrSlice(definedNames, token.TValue, true) != -1 {
436-
val += token.TValue
437-
continue
438-
}
439-
if strings.ContainsAny(token.TValue, "[]") {
440-
val += token.TValue
432+
if inStrSlice(definedNames, token.TValue, true) != -1 || strings.ContainsAny(token.TValue, "[]") {
441433
continue
442434
}
443435
operand, err := f.adjustFormulaOperand(sheet, sheetN, keepRelative, token, dir, num, offset)
444436
if err != nil {
445-
return val, err
437+
return ps.Render(), err
446438
}
447-
val += operand
448-
continue
439+
tokens[i].TValue = operand
449440
}
450-
if paren := transformParenthesesToken(token); paren != "" {
451-
val += transformParenthesesToken(token)
452-
continue
453-
}
454-
if token.TType == efp.TokenTypeOperand && token.TSubType == efp.TokenSubTypeText {
455-
val += string(efp.QuoteDouble) + strings.ReplaceAll(token.TValue, "\"", "\"\"") + string(efp.QuoteDouble)
456-
continue
457-
}
458-
val += token.TValue
459441
}
460-
return val, nil
442+
return ps.Render(), nil
461443
}
462444

463445
// transformParenthesesToken returns formula part with parentheses by given

cell.go

+1
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ func (f *File) removeFormula(c *xlsxC, ws *xlsxWorksheet, sheet string) error {
189189
}
190190
if c.F.T == STCellFormulaTypeShared && c.F.Ref != "" {
191191
si := c.F.Si
192+
ws.deleteSharedFormula(c)
192193
for r, row := range ws.SheetData.Row {
193194
for col, cell := range row.C {
194195
if cell.F != nil && cell.F.Si != nil && *cell.F.Si == *si {

0 commit comments

Comments
 (0)