summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rows.go6
-rw-r--r--rows_test.go20
2 files changed, 23 insertions, 3 deletions
diff --git a/rows.go b/rows.go
index 3796441..c8ad2b1 100644
--- a/rows.go
+++ b/rows.go
@@ -57,7 +57,8 @@ type Rows struct {
// Next will return true if find the next row element.
func (rows *Rows) Next() bool {
- return rows.curRow < len(rows.rows)
+ rows.curRow++
+ return rows.curRow <= len(rows.rows)
}
// Error will return the error when the find next row element
@@ -67,8 +68,7 @@ func (rows *Rows) Error() error {
// Columns return the current row's column values
func (rows *Rows) Columns() ([]string, error) {
- curRow := rows.rows[rows.curRow]
- rows.curRow++
+ curRow := rows.rows[rows.curRow-1]
columns := make([]string, len(curRow.C))
d := rows.f.sharedStringsReader()
diff --git a/rows_test.go b/rows_test.go
index a99a594..ba81f9f 100644
--- a/rows_test.go
+++ b/rows_test.go
@@ -6,6 +6,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
)
func TestRows(t *testing.T) {
@@ -41,6 +42,25 @@ func TestRows(t *testing.T) {
}
}
+// test bug https://github.com/360EntSecGroup-Skylar/excelize/issues/502
+func TestRowsIterator(t *testing.T) {
+ const (
+ sheet2 = "Sheet2"
+ expectedNumRow = 11
+ )
+ xlsx, err := OpenFile(filepath.Join("test", "Book1.xlsx"))
+ require.NoError(t, err)
+
+ rows, err := xlsx.Rows(sheet2)
+ require.NoError(t, err)
+ var rowCount int
+ for rows.Next() {
+ rowCount++
+ require.True(t, rowCount <= expectedNumRow, "rowCount is greater than expected")
+ }
+ assert.Equal(t, expectedNumRow, rowCount)
+}
+
func TestRowsError(t *testing.T) {
xlsx, err := OpenFile(filepath.Join("test", "Book1.xlsx"))
if !assert.NoError(t, err) {