diff options
author | Ri Xu <xuri.me@gmail.com> | 2016-12-20 14:40:36 +0800 |
---|---|---|
committer | Ri Xu <xuri.me@gmail.com> | 2016-12-20 14:40:36 +0800 |
commit | 6e1475a2429b2088a4c0b322962fc584370653d9 (patch) | |
tree | 1c7de032a3d3d6ea671ee66aab185140388fb94c /excelize.go | |
parent | 2a3620e750df7dc8c24791d51ca8e06c0f68799c (diff) |
Fix hyperlink missing after save issue and update completion row element logic to enhance compatibility.
Diffstat (limited to 'excelize.go')
-rw-r--r-- | excelize.go | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/excelize.go b/excelize.go index bb0659a..162cb2c 100644 --- a/excelize.go +++ b/excelize.go @@ -138,27 +138,39 @@ func completeCol(xlsx xlsxWorksheet, row int, cell int) xlsxWorksheet { // Completion row element tags of XML in a sheet. func completeRow(xlsx xlsxWorksheet, row int, cell int) xlsxWorksheet { - if len(xlsx.SheetData.Row) < row { - for i := len(xlsx.SheetData.Row); i < row; i++ { - xlsx.SheetData.Row = append(xlsx.SheetData.Row, xlsxRow{ - R: i + 1, - }) + if len(xlsx.SheetData.Row) >= row { + row = len(xlsx.SheetData.Row) + } + sheetData := xlsxSheetData{} + existsRows := map[int]int{} + for k, v := range xlsx.SheetData.Row { + existsRows[v.R] = k + } + for i := 0; i < row; i++ { + _, ok := existsRows[i+1] + if ok { + sheetData.Row = append(sheetData.Row, xlsx.SheetData.Row[existsRows[i+1]]) + continue } - buffer := bytes.Buffer{} - for ii := 0; ii < row; ii++ { - start := len(xlsx.SheetData.Row[ii].C) - if start == 0 { - for iii := start; iii < cell; iii++ { - buffer.WriteString(toAlphaString(iii + 1)) - buffer.WriteString(strconv.Itoa(ii + 1)) - xlsx.SheetData.Row[ii].C = append(xlsx.SheetData.Row[ii].C, xlsxC{ - R: buffer.String(), - }) - buffer.Reset() - } + sheetData.Row = append(sheetData.Row, xlsxRow{ + R: i + 1, + }) + } + buffer := bytes.Buffer{} + for ii := 0; ii < row; ii++ { + start := len(sheetData.Row[ii].C) + if start == 0 { + for iii := start; iii < cell; iii++ { + buffer.WriteString(toAlphaString(iii + 1)) + buffer.WriteString(strconv.Itoa(ii + 1)) + sheetData.Row[ii].C = append(sheetData.Row[ii].C, xlsxC{ + R: buffer.String(), + }) + buffer.Reset() } } } + xlsx.SheetData = sheetData return xlsx } |