diff options
author | xuri <xuri.me@gmail.com> | 2020-06-27 00:02:47 +0800 |
---|---|---|
committer | xuri <xuri.me@gmail.com> | 2020-06-27 00:02:47 +0800 |
commit | 48f19f60aa3e162146a9dc4edf7b4c8cf687ec26 (patch) | |
tree | 77fdff8dba0fbb26f8c534872f06a98258c1c273 /rows.go | |
parent | 15fd56853fe1b63217fb963c951cf4fef7b56a08 (diff) |
support the row element without r attribute in the worksheet
Diffstat (limited to 'rows.go')
-rw-r--r-- | rows.go | 40 |
1 files changed, 22 insertions, 18 deletions
@@ -25,18 +25,14 @@ import ( // GetRows return all the rows in a sheet by given worksheet name (case // sensitive). For example: // -// rows, err := f.Rows("Sheet1") +// rows, err := f.GetRows("Sheet1") // if err != nil { // fmt.Println(err) // return // } -// for rows.Next() { -// row, err := rows.Columns() -// if err != nil { -// fmt.Println(err) -// } +// for _, row := range rows { // for _, colCell := range row { -// fmt.Print(colCell, "\t") +// fmt.Println(colCell, "\t") // } // fmt.Println() // } @@ -57,7 +53,7 @@ func (f *File) GetRows(sheet string) ([][]string, error) { return results, nil } -// Rows defines an iterator to a sheet +// Rows defines an iterator to a sheet. type Rows struct { err error curRow, totalRow, stashRow int @@ -73,12 +69,12 @@ func (rows *Rows) Next() bool { return rows.curRow <= rows.totalRow } -// Error will return the error when the find next row element +// Error will return the error when the error occurs. func (rows *Rows) Error() error { return rows.err } -// Columns return the current row's column values +// Columns return the current row's column values. func (rows *Rows) Columns() ([]string, error) { var ( err error @@ -117,9 +113,13 @@ func (rows *Rows) Columns() ([]string, error) { if inElement == "c" { colCell := xlsxC{} _ = rows.decoder.DecodeElement(&colCell, &startElement) - cellCol, _, err = CellNameToCoordinates(colCell.R) - if err != nil { - return columns, err + if colCell.R != "" { + cellCol, _, err = CellNameToCoordinates(colCell.R) + if err != nil { + return columns, err + } + } else { + cellCol++ } blank := cellCol - len(columns) for i := 1; i < blank; i++ { @@ -177,10 +177,10 @@ func (f *File) Rows(sheet string) (*Rows, error) { f.saveFileList(name, replaceRelationshipsNameSpaceBytes(output)) } var ( - err error - inElement string - row int - rows Rows + err error + inElement string + row, curRow int + rows Rows ) decoder := f.xmlNewDecoder(bytes.NewReader(f.readXML(name))) for { @@ -194,12 +194,16 @@ func (f *File) Rows(sheet string) (*Rows, error) { if inElement == "row" { for _, attr := range startElement.Attr { if attr.Name.Local == "r" { - row, err = strconv.Atoi(attr.Value) + curRow, err = strconv.Atoi(attr.Value) if err != nil { return &rows, err } + row = curRow } } + if len(startElement.Attr) == 0 { + row++ + } rows.totalRow = row } default: |