OSDN Git Service

This closes #1792, support to update defined names reference when rename worksheet...
[excelize/excelize.git] / adjust.go
index bae49bc..5d60040 100644 (file)
--- a/adjust.go
+++ b/adjust.go
@@ -454,6 +454,33 @@ func (f *File) adjustFormulaRef(sheet, sheetN, formula string, keepRelative bool
        return val, nil
 }
 
+// adjustRangeSheetName returns replaced range reference by given source and
+// target sheet name.
+func adjustRangeSheetName(rng, source, target string) string {
+       cellRefs := strings.Split(rng, ",")
+       for i, cellRef := range cellRefs {
+               rangeRefs := strings.Split(cellRef, ":")
+               for j, rangeRef := range rangeRefs {
+                       parts := strings.Split(rangeRef, "!")
+                       for k, part := range parts {
+                               singleQuote := strings.HasPrefix(part, "'") && strings.HasSuffix(part, "'")
+                               if singleQuote {
+                                       part = strings.TrimPrefix(strings.TrimSuffix(part, "'"), "'")
+                               }
+                               if part == source {
+                                       if part = target; singleQuote {
+                                               part = "'" + part + "'"
+                                       }
+                               }
+                               parts[k] = part
+                       }
+                       rangeRefs[j] = strings.Join(parts, "!")
+               }
+               cellRefs[i] = strings.Join(rangeRefs, ":")
+       }
+       return strings.Join(cellRefs, ",")
+}
+
 // arrayFormulaOperandToken defines meta fields for transforming the array
 // formula to the normal formula.
 type arrayFormulaOperandToken struct {
@@ -471,12 +498,12 @@ func (af *arrayFormulaOperandToken) setCoordinates() error {
                }
                var c, r int
                if col {
-                       if cellRef.Row = TotalRows; i == 1 {
+                       if cellRef.Row = TotalRows; i == 0 {
                                cellRef.Row = 1
                        }
                }
                if row {
-                       if cellRef.Col = MaxColumns; i == 1 {
+                       if cellRef.Col = MaxColumns; i == 0 {
                                cellRef.Col = 1
                        }
                }