GetCols support the row element without r attribute in the worksheet

formula
xuri 5 years ago
parent 48f19f60aa
commit 1cbb05d497
No known key found for this signature in database
GPG Key ID: BA5E5BB1C948EDF7

@ -110,6 +110,9 @@ func TestGetCellValue(t *testing.T) {
assert.Equal(t, cell, value)
assert.NoError(t, err)
}
cols, err := f.GetCols("Sheet1")
assert.Equal(t, [][]string{{"", "", "A3", "A4", "", "", "A7", "A8"}, {"", "", "", "B4", "", "", "B7", "B8"}}, cols)
assert.NoError(t, err)
}
func TestGetCellFormula(t *testing.T) {

@ -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,12 +99,24 @@ 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, "")
@ -118,8 +130,6 @@ func (cols *Cols) Rows() ([]string, error) {
}
}
}
}
}
return rows, nil
}
@ -154,7 +164,7 @@ func (f *File) Cols(sheet string) (*Cols, error) {
var (
inElement string
cols Cols
cellCol int
cellCol, curRow, row int
err error
)
cols.sheetXML = f.readXML(name)
@ -168,24 +178,29 @@ 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
}
}
}

@ -32,7 +32,7 @@ import (
// }
// for _, row := range rows {
// for _, colCell := range row {
// fmt.Println(colCell, "\t")
// fmt.Print(colCell, "\t")
// }
// fmt.Println()
// }
@ -111,6 +111,7 @@ func (rows *Rows) Columns() ([]string, error) {
}
}
if inElement == "c" {
cellCol++
colCell := xlsxC{}
_ = rows.decoder.DecodeElement(&colCell, &startElement)
if colCell.R != "" {
@ -118,8 +119,6 @@ func (rows *Rows) Columns() ([]string, error) {
if err != nil {
return columns, err
}
} else {
cellCol++
}
blank := cellCol - len(columns)
for i := 1; i < blank; i++ {
@ -179,7 +178,7 @@ func (f *File) Rows(sheet string) (*Rows, error) {
var (
err error
inElement string
row, curRow int
row int
rows Rows
)
decoder := f.xmlNewDecoder(bytes.NewReader(f.readXML(name)))
@ -192,18 +191,15 @@ func (f *File) Rows(sheet string) (*Rows, error) {
case xml.StartElement:
inElement = startElement.Name.Local
if inElement == "row" {
row++
for _, attr := range startElement.Attr {
if attr.Name.Local == "r" {
curRow, err = strconv.Atoi(attr.Value)
row, err = strconv.Atoi(attr.Value)
if err != nil {
return &rows, err
}
row = curRow
}
}
if len(startElement.Attr) == 0 {
row++
}
rows.totalRow = row
}
default:

Loading…
Cancel
Save