| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package excelize
- import (
- "encoding/xml"
- "strconv"
- "strings"
- )
- // 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 r
- }
- rows := xlsx.SheetData.Row
- 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.
- 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,
- // this function is inteded to be used with for range on rows
- // 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
- }
- }
|