diff --git a/excelize_test.go b/excelize_test.go index 292b358..887fea8 100644 --- a/excelize_test.go +++ b/excelize_test.go @@ -11,6 +11,16 @@ func TestExcelize(t *testing.T) { if err != nil { t.Log(err) } + // Test get all the rows in a not exists sheet. + rows := f1.GetRows("Sheet4") + // Test get all the rows in a sheet. + rows = f1.GetRows("Sheet2") + for _, row := range rows { + for _, cell := range row { + t.Log(cell, "\t") + } + t.Log("\r\n") + } f1.UpdateLinkedValue() f1.SetCellInt("SHEET2", "A1", 100) f1.SetCellStr("SHEET2", "C11", "Knowns") diff --git a/rows.go b/rows.go index c717c23..90cabee 100644 --- a/rows.go +++ b/rows.go @@ -2,49 +2,63 @@ package excelize import ( "encoding/xml" + "strconv" "strings" - "strconv" ) - -// GetRows return all the rows in a sheet -func (f *File) GetRows(sheet string) ([]xlsxRow, error) { - var xlsx xlsxWorksheet +// GetRows return all the rows in a sheet, for example: +// +// rows := xlsx.GetRows("Sheet2") +// for _, row := range rows { +// for _, colCell := range row { +// fmt.Print(colCell, "\t") +// } +// fmt.Println() +// } +// +func (f *File) GetRows(sheet string) [][]string { + xlsx := xlsxWorksheet{} + r := [][]string{} name := `xl/worksheets/` + strings.ToLower(sheet) + `.xml` err := xml.Unmarshal([]byte(f.readXML(name)), &xlsx) - if ( err != nil ) { - return nil, err + if err != nil { + return r } rows := xlsx.SheetData.Row - - return rows, nil - + for _, row := range rows { + c := []string{} + for _, colCell := range row.C { + val, _ := colCell.getValueFrom(f) + c = append(c, val) + } + r = append(r, c) + } + return r } - -// readXMLSST read xmlSST simple function +// readXMLSST read xmlSST simple function. func readXMLSST(f *File) (xlsxSST, error) { shardStrings := xlsxSST{} err := xml.Unmarshal([]byte(f.readXML(`xl/sharedStrings.xml`)), &shardStrings) return shardStrings, err } -// GetValueFrom return a value from a column/row cell, +// getValueFrom return a value from a column/row cell, // this function is inteded to be used with for range on rows -// an argument with the xlsx opened file -func (self* xlsxC) GetValueFrom(f *File) (string, error) { - switch self.T { - case "s": - xlsxSI := 0 - xlsxSI, _ = strconv.Atoi(self.V) - d, err := readXMLSST(f) - if ( err != nil ) { - return "", err - } - return d.SI[xlsxSI].T, nil - case "str": - return self.V, nil - default: - return self.V, nil - } // switch +// an argument with the xlsx opened file. +func (xlsx *xlsxC) getValueFrom(f *File) (string, error) { + switch xlsx.T { + case "s": + xlsxSI := 0 + xlsxSI, _ = strconv.Atoi(xlsx.V) + d, err := readXMLSST(f) + if err != nil { + return "", err + } + return d.SI[xlsxSI].T, nil + case "str": + return xlsx.V, nil + default: + return xlsx.V, nil + } } diff --git a/test/Workbook1.xlsx b/test/Workbook1.xlsx index 2ac442a..d2a9a2e 100644 Binary files a/test/Workbook1.xlsx and b/test/Workbook1.xlsx differ diff --git a/test/Workbook_2.xlsx b/test/Workbook_2.xlsx deleted file mode 100644 index efb9785..0000000 Binary files a/test/Workbook_2.xlsx and /dev/null differ diff --git a/test/Workbook_3.xlsx b/test/Workbook_3.xlsx deleted file mode 100644 index dd63d14..0000000 Binary files a/test/Workbook_3.xlsx and /dev/null differ