xmlWorkbook_test.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package xlsx
  2. import (
  3. "bytes"
  4. "encoding/xml"
  5. . "gopkg.in/check.v1"
  6. )
  7. type WorkbookSuite struct{}
  8. var _ = Suite(&WorkbookSuite{})
  9. // Test we can succesfully unmarshal the workbook.xml file from within
  10. // an XLSX file and return a xlsxWorkbook struct (and associated
  11. // children).
  12. func (w *WorkbookSuite) TestUnmarshallWorkbookXML(c *C) {
  13. var buf = bytes.NewBufferString(
  14. `<?xml version="1.0"
  15. encoding="UTF-8"
  16. standalone="yes"?>
  17. <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
  18. xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  19. <fileVersion appName="xl"
  20. lastEdited="4"
  21. lowestEdited="4"
  22. rupBuild="4506"/>
  23. <workbookPr defaultThemeVersion="124226" date1904="true"/>
  24. <bookViews>
  25. <workbookView xWindow="120"
  26. yWindow="75"
  27. windowWidth="15135"
  28. windowHeight="7620"/>
  29. </bookViews>
  30. <sheets>
  31. <sheet name="Sheet1"
  32. sheetId="1"
  33. r:id="rId1"/>
  34. <sheet name="Sheet2"
  35. sheetId="2"
  36. r:id="rId2"/>
  37. <sheet name="Sheet3"
  38. sheetId="3"
  39. r:id="rId3"/>
  40. </sheets>
  41. <definedNames>
  42. <definedName name="monitors"
  43. localSheetId="0">Sheet1!$A$1533</definedName>
  44. </definedNames>
  45. <calcPr calcId="125725"/>
  46. </workbook>`)
  47. var workbook *xlsxWorkbook
  48. workbook = new(xlsxWorkbook)
  49. err := xml.NewDecoder(buf).Decode(workbook)
  50. c.Assert(err, IsNil)
  51. c.Assert(workbook.FileVersion.AppName, Equals, "xl")
  52. c.Assert(workbook.FileVersion.LastEdited, Equals, "4")
  53. c.Assert(workbook.FileVersion.LowestEdited, Equals, "4")
  54. c.Assert(workbook.FileVersion.RupBuild, Equals, "4506")
  55. c.Assert(workbook.WorkbookPr.DefaultThemeVersion, Equals, "124226")
  56. c.Assert(workbook.WorkbookPr.Date1904, Equals, true)
  57. c.Assert(workbook.BookViews.WorkBookView, HasLen, 1)
  58. workBookView := workbook.BookViews.WorkBookView[0]
  59. c.Assert(workBookView.XWindow, Equals, "120")
  60. c.Assert(workBookView.YWindow, Equals, "75")
  61. c.Assert(workBookView.WindowWidth, Equals, 15135)
  62. c.Assert(workBookView.WindowHeight, Equals, 7620)
  63. c.Assert(workbook.Sheets.Sheet, HasLen, 3)
  64. sheet := workbook.Sheets.Sheet[0]
  65. c.Assert(sheet.Id, Equals, "rId1")
  66. c.Assert(sheet.Name, Equals, "Sheet1")
  67. c.Assert(sheet.SheetId, Equals, "1")
  68. c.Assert(workbook.DefinedNames.DefinedName, HasLen, 1)
  69. dname := workbook.DefinedNames.DefinedName[0]
  70. c.Assert(dname.Data, Equals, "Sheet1!$A$1533")
  71. c.Assert(dname.LocalSheetID, Equals, "0")
  72. c.Assert(dname.Name, Equals, "monitors")
  73. c.Assert(workbook.CalcPr.CalcId, Equals, "125725")
  74. }
  75. // Test we can marshall a Workbook to xml
  76. func (w *WorkbookSuite) TestMarshallWorkbook(c *C) {
  77. var workbook *xlsxWorkbook
  78. workbook = new(xlsxWorkbook)
  79. workbook.FileVersion = xlsxFileVersion{}
  80. workbook.FileVersion.AppName = "xlsx"
  81. workbook.WorkbookPr = xlsxWorkbookPr{BackupFile: false}
  82. workbook.BookViews = xlsxBookViews{}
  83. workbook.BookViews.WorkBookView = make([]xlsxWorkBookView, 1)
  84. workbook.BookViews.WorkBookView[0] = xlsxWorkBookView{}
  85. workbook.Sheets = xlsxSheets{}
  86. workbook.Sheets.Sheet = make([]xlsxSheet, 1)
  87. workbook.Sheets.Sheet[0] = xlsxSheet{Name: "sheet1", SheetId: "1", Id: "rId2"}
  88. body, err := xml.Marshal(workbook)
  89. c.Assert(err, IsNil)
  90. expectedWorkbook := `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><fileVersion appName="xlsx"></fileVersion><workbookPr date1904="false"></workbookPr><workbookProtection></workbookProtection><bookViews><workbookView></workbookView></bookViews><sheets><sheet name="sheet1" sheetId="1" xmlns:relationships="http://schemas.openxmlformats.org/officeDocument/2006/relationships" relationships:id="rId2"></sheet></sheets><definedNames></definedNames><calcPr></calcPr></workbook>`
  91. c.Assert(string(body), Equals, expectedWorkbook)
  92. }