diff options
author | xuri <xuri.me@gmail.com> | 2020-06-28 00:02:32 +0800 |
---|---|---|
committer | xuri <xuri.me@gmail.com> | 2020-06-28 00:02:32 +0800 |
commit | 1cbb05d4977fc1c03fa37d704118fd9c722e487d (patch) | |
tree | 9f548ea7d07cc8a007fda12b4cd2ea8f7a0155cd /col.go | |
parent | 48f19f60aa3e162146a9dc4edf7b4c8cf687ec26 (diff) |
GetCols support the row element without r attribute in the worksheet
Diffstat (limited to 'col.go')
-rw-r--r-- | col.go | 55 |
1 files changed, 35 insertions, 20 deletions
@@ -48,8 +48,8 @@ type Cols struct { // return // } // for _, col := range cols { -// for _, colCell := range col { -// fmt.Println(colCell, "\t") +// for _, rowCell := range col { +// fmt.Print(rowCell, "\t") // } // fmt.Println() // } @@ -99,24 +99,34 @@ func (cols *Cols) Rows() ([]string, error) { switch startElement := token.(type) { case xml.StartElement: inElement = startElement.Name.Local + if inElement == "row" { + cellCol = 0 + cellRow++ + for _, attr := range startElement.Attr { + if attr.Name.Local == "r" { + cellRow, _ = strconv.Atoi(attr.Value) + } + } + } if inElement == "c" { + cellCol++ for _, attr := range startElement.Attr { if attr.Name.Local == "r" { if cellCol, cellRow, err = CellNameToCoordinates(attr.Value); err != nil { return rows, err } - blank := cellRow - len(rows) - for i := 1; i < blank; i++ { - rows = append(rows, "") - } - if cellCol == cols.curCol { - colCell := xlsxC{} - _ = decoder.DecodeElement(&colCell, &startElement) - val, _ := colCell.getValueFrom(cols.f, d) - rows = append(rows, val) - } } } + blank := cellRow - len(rows) + for i := 1; i < blank; i++ { + rows = append(rows, "") + } + if cellCol == cols.curCol { + colCell := xlsxC{} + _ = decoder.DecodeElement(&colCell, &startElement) + val, _ := colCell.getValueFrom(cols.f, d) + rows = append(rows, val) + } } } } @@ -152,10 +162,10 @@ func (f *File) Cols(sheet string) (*Cols, error) { f.saveFileList(name, replaceRelationshipsNameSpaceBytes(output)) } var ( - inElement string - cols Cols - cellCol int - err error + inElement string + cols Cols + cellCol, curRow, row int + err error ) cols.sheetXML = f.readXML(name) decoder := f.xmlNewDecoder(bytes.NewReader(cols.sheetXML)) @@ -168,25 +178,30 @@ func (f *File) Cols(sheet string) (*Cols, error) { case xml.StartElement: inElement = startElement.Name.Local if inElement == "row" { + row++ for _, attr := range startElement.Attr { if attr.Name.Local == "r" { - if cols.totalRow, err = strconv.Atoi(attr.Value); err != nil { + if curRow, err = strconv.Atoi(attr.Value); err != nil { return &cols, err } + row = curRow } } + cols.totalRow = row + cellCol = 0 } if inElement == "c" { + cellCol++ for _, attr := range startElement.Attr { if attr.Name.Local == "r" { if cellCol, _, err = CellNameToCoordinates(attr.Value); err != nil { return &cols, err } - if cellCol > cols.totalCol { - cols.totalCol = cellCol - } } } + if cellCol > cols.totalCol { + cols.totalCol = cellCol + } } } } |