Skip to content

Commit 9b5b74d

Browse files
committed
Performance optimization, use the array index instead of the value in range.
1 parent 905be46 commit 9b5b74d

File tree

5 files changed

+44
-44
lines changed

5 files changed

+44
-44
lines changed

cell.go

+16-16
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@ func (f *File) GetCellValue(sheet, axis string) string {
9191
if rows < xAxis {
9292
return ""
9393
}
94-
for _, v := range xlsx.SheetData.Row {
95-
if v.R == row {
96-
for _, r := range v.C {
97-
if axis == r.R {
98-
val, _ := r.getValueFrom(f, f.sharedStringsReader())
94+
for k := range xlsx.SheetData.Row {
95+
if xlsx.SheetData.Row[k].R == row {
96+
for i := range xlsx.SheetData.Row[k].C {
97+
if axis == xlsx.SheetData.Row[k].C[i].R {
98+
val, _ := xlsx.SheetData.Row[k].C[i].getValueFrom(f, f.sharedStringsReader())
9999
return val
100100
}
101101
}
@@ -161,12 +161,12 @@ func (f *File) GetCellFormula(sheet, axis string) string {
161161
if rows < xAxis {
162162
return ""
163163
}
164-
for _, v := range xlsx.SheetData.Row {
165-
if v.R == row {
166-
for _, f := range v.C {
167-
if axis == f.R {
168-
if f.F != nil {
169-
return f.F.Content
164+
for k := range xlsx.SheetData.Row {
165+
if xlsx.SheetData.Row[k].R == row {
166+
for i := range xlsx.SheetData.Row[k].C {
167+
if axis == xlsx.SheetData.Row[k].C[i].R {
168+
if xlsx.SheetData.Row[k].C[i].F != nil {
169+
return xlsx.SheetData.Row[k].C[i].F.Content
170170
}
171171
}
172172
}
@@ -256,12 +256,12 @@ func (f *File) GetCellHyperLink(sheet, axis string) (bool, string) {
256256
if xlsx.Hyperlinks == nil || axis == "" {
257257
return link, target
258258
}
259-
for _, h := range xlsx.Hyperlinks.Hyperlink {
260-
if h.Ref == axis {
259+
for h := range xlsx.Hyperlinks.Hyperlink {
260+
if xlsx.Hyperlinks.Hyperlink[h].Ref == axis {
261261
link = true
262-
target = h.Location
263-
if h.RID != "" {
264-
target = f.getSheetRelationshipsTargetByID(sheet, h.RID)
262+
target = xlsx.Hyperlinks.Hyperlink[h].Location
263+
if xlsx.Hyperlinks.Hyperlink[h].RID != "" {
264+
target = f.getSheetRelationshipsTargetByID(sheet, xlsx.Hyperlinks.Hyperlink[h].RID)
265265
}
266266
}
267267
}

chart.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -550,23 +550,23 @@ func (f *File) drawScatterChart(formatSet *formatChart) *cPlotArea {
550550
// sets.
551551
func (f *File) drawChartSeries(formatSet *formatChart) *[]cSer {
552552
ser := []cSer{}
553-
for k, v := range formatSet.Series {
553+
for k := range formatSet.Series {
554554
ser = append(ser, cSer{
555555
IDx: &attrValInt{Val: k},
556556
Order: &attrValInt{Val: k},
557557
Tx: &cTx{
558558
StrRef: &cStrRef{
559-
F: v.Name,
559+
F: formatSet.Series[k].Name,
560560
},
561561
},
562562
SpPr: f.drawChartSeriesSpPr(k, formatSet),
563563
Marker: f.drawChartSeriesMarker(k, formatSet),
564564
DPt: f.drawChartSeriesDPt(k, formatSet),
565565
DLbls: f.drawChartSeriesDLbls(formatSet),
566-
Cat: f.drawChartSeriesCat(v, formatSet),
567-
Val: f.drawChartSeriesVal(v, formatSet),
568-
XVal: f.drawChartSeriesXVal(v, formatSet),
569-
YVal: f.drawChartSeriesYVal(v, formatSet),
566+
Cat: f.drawChartSeriesCat(formatSet.Series[k], formatSet),
567+
Val: f.drawChartSeriesVal(formatSet.Series[k], formatSet),
568+
XVal: f.drawChartSeriesXVal(formatSet.Series[k], formatSet),
569+
YVal: f.drawChartSeriesYVal(formatSet.Series[k], formatSet),
570570
})
571571
}
572572
return &ser

col.go

+14-14
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ func (f *File) GetColVisible(sheet, column string) bool {
2727
if xlsx.Cols == nil {
2828
return visible
2929
}
30-
for _, c := range xlsx.Cols.Col {
31-
if c.Min <= col && col <= c.Max {
32-
visible = !c.Hidden
30+
for c := range xlsx.Cols.Col {
31+
if xlsx.Cols.Col[c].Min <= col && col <= xlsx.Cols.Col[c].Max {
32+
visible = !xlsx.Cols.Col[c].Hidden
3333
}
3434
}
3535
return visible
@@ -55,9 +55,9 @@ func (f *File) SetColVisible(sheet, column string, visible bool) {
5555
xlsx.Cols = &cols
5656
return
5757
}
58-
for _, v := range xlsx.Cols.Col {
59-
if v.Min <= c && c <= v.Max {
60-
col = v
58+
for v := range xlsx.Cols.Col {
59+
if xlsx.Cols.Col[v].Min <= c && c <= xlsx.Cols.Col[v].Max {
60+
col = xlsx.Cols.Col[v]
6161
}
6262
}
6363
col.Min = c
@@ -262,12 +262,12 @@ func (f *File) InsertCol(sheet, column string) {
262262
//
263263
func (f *File) RemoveCol(sheet, column string) {
264264
xlsx := f.workSheetReader(sheet)
265-
for i, r := range xlsx.SheetData.Row {
266-
for k, v := range r.C {
265+
for r := range xlsx.SheetData.Row {
266+
for k, v := range xlsx.SheetData.Row[r].C {
267267
axis := v.R
268268
col := string(strings.Map(letterOnlyMapF, axis))
269269
if col == column {
270-
xlsx.SheetData.Row[i].C = append(xlsx.SheetData.Row[i].C[:k], xlsx.SheetData.Row[i].C[k+1:]...)
270+
xlsx.SheetData.Row[r].C = append(xlsx.SheetData.Row[r].C[:k], xlsx.SheetData.Row[r].C[k+1:]...)
271271
}
272272
}
273273
}
@@ -278,13 +278,13 @@ func (f *File) RemoveCol(sheet, column string) {
278278
// Completion column element tags of XML in a sheet.
279279
func completeCol(xlsx *xlsxWorksheet, row, cell int) {
280280
buffer := bytes.Buffer{}
281-
for k, v := range xlsx.SheetData.Row {
282-
if len(v.C) < cell {
283-
start := len(v.C)
281+
for r := range xlsx.SheetData.Row {
282+
if len(xlsx.SheetData.Row[r].C) < cell {
283+
start := len(xlsx.SheetData.Row[r].C)
284284
for iii := start; iii < cell; iii++ {
285285
buffer.WriteString(ToAlphaString(iii))
286-
buffer.WriteString(strconv.Itoa(k + 1))
287-
xlsx.SheetData.Row[k].C = append(xlsx.SheetData.Row[k].C, xlsxC{
286+
buffer.WriteString(strconv.Itoa(r + 1))
287+
xlsx.SheetData.Row[r].C = append(xlsx.SheetData.Row[r].C, xlsxC{
288288
R: buffer.String(),
289289
})
290290
buffer.Reset()

excelize.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ func checkSheet(xlsx *xlsxWorksheet) {
113113
}
114114
sheetData := xlsxSheetData{}
115115
existsRows := map[int]int{}
116-
for k, v := range xlsx.SheetData.Row {
117-
existsRows[v.R] = k
116+
for k := range xlsx.SheetData.Row {
117+
existsRows[xlsx.SheetData.Row[k].R] = k
118118
}
119119
for i := 0; i < row; i++ {
120120
_, ok := existsRows[i+1]
@@ -167,8 +167,8 @@ func replaceWorkSheetsRelationshipsNameSpace(workbookMarshal string) string {
167167
func (f *File) UpdateLinkedValue() {
168168
for _, name := range f.GetSheetMap() {
169169
xlsx := f.workSheetReader(name)
170-
for indexR, row := range xlsx.SheetData.Row {
171-
for indexC, col := range row.C {
170+
for indexR := range xlsx.SheetData.Row {
171+
for indexC, col := range xlsx.SheetData.Row[indexR].C {
172172
if col.F != nil && col.V != "" {
173173
xlsx.SheetData.Row[indexR].C[indexC].V = ""
174174
xlsx.SheetData.Row[indexR].C[indexC].T = ""

rows.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -266,11 +266,11 @@ func (f *File) InsertRow(sheet string, row int) {
266266
// 3000 rows one sheet).
267267
func checkRow(xlsx *xlsxWorksheet) {
268268
buffer := bytes.Buffer{}
269-
for k, v := range xlsx.SheetData.Row {
270-
lenCol := len(v.C)
269+
for k := range xlsx.SheetData.Row {
270+
lenCol := len(xlsx.SheetData.Row[k].C)
271271
if lenCol > 0 {
272-
endR := string(strings.Map(letterOnlyMapF, v.C[lenCol-1].R))
273-
endRow, _ := strconv.Atoi(strings.Map(intOnlyMapF, v.C[lenCol-1].R))
272+
endR := string(strings.Map(letterOnlyMapF, xlsx.SheetData.Row[k].C[lenCol-1].R))
273+
endRow, _ := strconv.Atoi(strings.Map(intOnlyMapF, xlsx.SheetData.Row[k].C[lenCol-1].R))
274274
endCol := TitleToNumber(endR) + 1
275275
if lenCol < endCol {
276276
oldRow := xlsx.SheetData.Row[k].C

0 commit comments

Comments
 (0)