summaryrefslogtreecommitdiff
path: root/excelize.go
diff options
context:
space:
mode:
authorRi Xu <xuri.me@gmail.com>2016-12-20 14:40:36 +0800
committerRi Xu <xuri.me@gmail.com>2016-12-20 14:40:36 +0800
commit6e1475a2429b2088a4c0b322962fc584370653d9 (patch)
tree1c7de032a3d3d6ea671ee66aab185140388fb94c /excelize.go
parent2a3620e750df7dc8c24791d51ca8e06c0f68799c (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.go46
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
}