瀏覽代碼

Bugfix #23 can't get multiple records.

Ri Xu 8 年之前
父節點
當前提交
4b8b410f52
共有 2 個文件被更改,包括 47 次插入4 次删除
  1. 47 4
      rows.go
  2. 二進制
      test/Workbook1.xlsx

+ 47 - 4
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:
 //

二進制
test/Workbook1.xlsx