rows.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package excelize
  2. import (
  3. "encoding/xml"
  4. "strconv"
  5. "strings"
  6. )
  7. // GetRows return all the rows in a sheet, for example:
  8. //
  9. // rows := xlsx.GetRows("Sheet2")
  10. // for _, row := range rows {
  11. // for _, colCell := range row {
  12. // fmt.Print(colCell, "\t")
  13. // }
  14. // fmt.Println()
  15. // }
  16. //
  17. func (f *File) GetRows(sheet string) [][]string {
  18. xlsx := xlsxWorksheet{}
  19. r := [][]string{}
  20. name := "xl/worksheets/" + strings.ToLower(sheet) + ".xml"
  21. err := xml.Unmarshal([]byte(f.readXML(name)), &xlsx)
  22. if err != nil {
  23. return r
  24. }
  25. rows := xlsx.SheetData.Row
  26. for _, row := range rows {
  27. c := []string{}
  28. for _, colCell := range row.C {
  29. val, _ := colCell.getValueFrom(f)
  30. c = append(c, val)
  31. }
  32. r = append(r, c)
  33. }
  34. return r
  35. }
  36. // SetRowHeight provides a function to set the height of a single row.
  37. // For example:
  38. //
  39. // xlsx := excelize.CreateFile()
  40. // xlsx.SetRowHeight("Sheet1", 0, 50)
  41. // err := xlsx.Save()
  42. // if err != nil {
  43. // fmt.Println(err)
  44. // os.Exit(1)
  45. // }
  46. //
  47. func (f *File) SetRowHeight(sheet string, rowIndex int, height float64) {
  48. xlsx := xlsxWorksheet{}
  49. name := "xl/worksheets/" + strings.ToLower(sheet) + ".xml"
  50. xml.Unmarshal([]byte(f.readXML(name)), &xlsx)
  51. rows := rowIndex + 1
  52. cells := 0
  53. xlsx = completeRow(xlsx, rows, cells)
  54. xlsx.SheetData.Row[rowIndex].Ht = strconv.FormatFloat(height, 'f', -1, 64)
  55. xlsx.SheetData.Row[rowIndex].CustomHeight = true
  56. output, _ := xml.Marshal(xlsx)
  57. f.saveFileList(name, replaceWorkSheetsRelationshipsNameSpace(string(output)))
  58. }
  59. // readXMLSST read xmlSST simple function.
  60. func readXMLSST(f *File) (xlsxSST, error) {
  61. shardStrings := xlsxSST{}
  62. err := xml.Unmarshal([]byte(f.readXML("xl/sharedStrings.xml")), &shardStrings)
  63. return shardStrings, err
  64. }
  65. // getValueFrom return a value from a column/row cell, this function is inteded
  66. // to be used with for range on rows an argument with the xlsx opened file.
  67. func (xlsx *xlsxC) getValueFrom(f *File) (string, error) {
  68. switch xlsx.T {
  69. case "s":
  70. xlsxSI := 0
  71. xlsxSI, _ = strconv.Atoi(xlsx.V)
  72. d, err := readXMLSST(f)
  73. if err != nil {
  74. return "", err
  75. }
  76. return d.SI[xlsxSI].T, nil
  77. case "str":
  78. return xlsx.V, nil
  79. default:
  80. return xlsx.V, nil
  81. }
  82. }