summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRi Xu <xuri.me@gmail.com>2017-02-17 17:41:11 +0800
committerRi Xu <xuri.me@gmail.com>2017-02-17 17:41:11 +0800
commit4b8b410f523993520c133200dacc44d5311b9fd5 (patch)
treee0324a96eab8227c08034da47749031f876b021a
parent83410317edfb5cb7d278dda4788effed729bddab (diff)
Bugfix #23 can't get multiple records.
-rw-r--r--rows.go51
-rw-r--r--test/Workbook1.xlsxbin46045 -> 23055 bytes
2 files changed, 47 insertions, 4 deletions
diff --git a/rows.go b/rows.go
index 58b52a3..75ee7a2 100644
--- a/rows.go
+++ b/rows.go
@@ -25,7 +25,17 @@ func (f *File) GetRows(sheet string) [][]string {
return rows
}
var inElement string
+ var r xlsxRow
var row []string
+ tr, tc := f.getTotalRowsCols(sheet)
+ for i := 0; i < tr; i++ {
+ row = []string{}
+ for j := 0; j <= tc; j++ {
+ row = append(row, "")
+ }
+ rows = append(rows, row)
+ }
+ decoder = xml.NewDecoder(strings.NewReader(f.readXML(name)))
for {
token, _ := decoder.Token()
if token == nil {
@@ -35,14 +45,14 @@ func (f *File) GetRows(sheet string) [][]string {
case xml.StartElement:
inElement = startElement.Name.Local
if inElement == "row" {
- var r xlsxRow
+ r = xlsxRow{}
decoder.DecodeElement(&r, &startElement)
+ cr := r.R - 1
for _, colCell := range r.C {
+ c := titleToNumber(strings.Map(letterOnlyMapF, colCell.R))
val, _ := colCell.getValueFrom(f, d)
- row = append(row, val)
+ rows[cr][c] = val
}
- rows = append(rows, row)
- row = row[:0]
}
default:
}
@@ -50,6 +60,39 @@ func (f *File) GetRows(sheet string) [][]string {
return rows
}
+// getTotalRowsCols provides a function to get total columns and rows in a
+// sheet.
+func (f *File) getTotalRowsCols(sheet string) (int, int) {
+ name := "xl/worksheets/" + strings.ToLower(sheet) + ".xml"
+ decoder := xml.NewDecoder(strings.NewReader(f.readXML(name)))
+ var inElement string
+ var r xlsxRow
+ var tr, tc int
+ for {
+ token, _ := decoder.Token()
+ if token == nil {
+ break
+ }
+ switch startElement := token.(type) {
+ case xml.StartElement:
+ inElement = startElement.Name.Local
+ if inElement == "row" {
+ r = xlsxRow{}
+ decoder.DecodeElement(&r, &startElement)
+ tr = r.R
+ for _, colCell := range r.C {
+ col := titleToNumber(strings.Map(letterOnlyMapF, colCell.R))
+ if col > tc {
+ tc = col
+ }
+ }
+ }
+ default:
+ }
+ }
+ return tr, tc
+}
+
// SetRowHeight provides a function to set the height of a single row.
// For example:
//
diff --git a/test/Workbook1.xlsx b/test/Workbook1.xlsx
index f5417e9..ee52187 100644
--- a/test/Workbook1.xlsx
+++ b/test/Workbook1.xlsx
Binary files differ