Browse Source

Marshal xlsxSST and xlsxWorksheet.

Geoffrey J. Teale 11 years ago
parent
commit
718fc0446e
4 changed files with 66 additions and 34 deletions
  1. 6 0
      sharedstrings.go
  2. 24 1
      sharedstrings_test.go
  3. 0 11
      sheet.go
  4. 36 22
      sheet_test.go

+ 6 - 0
sharedstrings.go

@@ -1,9 +1,15 @@
 package xlsx
 
+import (
+	"encoding/xml"
+)
+
+
 // xlsxSST directly maps the sst element from the namespace
 // http://schemas.openxmlformats.org/spreadsheetml/2006/main currently
 // I have not checked this for completeness - it does as much as need.
 type xlsxSST struct {
+	XMLName     xml.Name `xml:"sst"`
 	Count       int   `xml:"count,attr"`
 	UniqueCount int   `xml:"uniqueCount,attr"`
 	SI          []xlsxSI `xml:"si"`

+ 24 - 1
sharedstrings_test.go

@@ -85,7 +85,7 @@ func (s *SharedStringsSuite) TestUnmarshallSharedStrings(c *C) {
 }
 
 // Test we can correctly create the xlsx.xlsxSST struct from a RefTable
-func (s *SharedStringsSuite) TestMakeXlsxSST(c *C) {
+func (s *SharedStringsSuite) TestMakeXLSXSST(c *C) {
 	refTable := NewSharedStringRefTable()
 	refTable.AddString("Foo")
 	refTable.AddString("Bar")
@@ -97,3 +97,26 @@ func (s *SharedStringsSuite) TestMakeXlsxSST(c *C) {
 	si := sst.SI[0]
 	c.Assert(si.T, Equals, "Foo")
 }
+
+
+func (s *SharedStringsSuite) TestMarshalSST(c *C) {
+	refTable := NewSharedStringRefTable()
+	refTable.AddString("Foo")
+	sst := refTable.makeXLSXSST()
+
+	output := bytes.NewBufferString(xml.Header)
+	body, err := xml.MarshalIndent(sst, "  ", "  ")
+	c.Assert(err, IsNil)
+	c.Assert(body, NotNil)
+	_, err = output.Write(body)
+	c.Assert(err, IsNil)
+
+	expectedXLSXSST := `<?xml version="1.0" encoding="UTF-8"?>
+  <sst count="1" uniqueCount="1">
+    <si>
+      <t>Foo</t>
+    </si>
+  </sst>`
+	c.Assert(output.String(), Equals, expectedXLSXSST)
+}
+

+ 0 - 11
sheet.go

@@ -55,15 +55,4 @@ func (s *Sheet) makeXLSXSheet(refTable *RefTable) *xlsxWorksheet {
 		numericToLetters(maxCell), maxRow + 1)
 	worksheet.Dimension = dimension
 	return worksheet
-	// output := bytes.NewBufferString(xml.Header)
-	// body, err := xml.MarshalIndent(worksheet, "  ", "  ")
-	// if err != nil {
-	// 	return nil, err
-	// }
-	// _, err = output.Write(body)
-	// if err != nil {
-	// 	return nil, err
-	// }
-	// return output.Bytes(), nil
-
 }

+ 36 - 22
sheet_test.go

@@ -1,6 +1,8 @@
 package xlsx
 
 import (
+	"bytes"
+	"encoding/xml"
 	. "gopkg.in/check.v1"
 )
 
@@ -25,9 +27,7 @@ func (s *SheetSuite) TestMakeXLSXSheetFromRows(c *C) {
 	cell := row.AddCell()
 	cell.Value = "A cell!"
 	refTable := NewSharedStringRefTable()
-	// refTable.AddStringsFromSheet(sheet)
 	xSheet:= sheet.makeXLSXSheet(refTable)
-	// xSST := refTable.makeXLSXSST()
 	c.Assert(xSheet.Dimension.Ref, Equals, "A1:A1")
 	c.Assert(xSheet.SheetData.Row, HasLen, 1)
 	xRow := xSheet.SheetData.Row[0]
@@ -39,27 +39,41 @@ func (s *SheetSuite) TestMakeXLSXSheetFromRows(c *C) {
 	c.Assert(xC.S, Equals, 0)
 	c.Assert(xC.T, Equals, "s") // Shared string type
 	c.Assert(xC.V, Equals, "0") // reference to shared string
+	xSST := refTable.makeXLSXSST()
+	c.Assert(xSST.Count, Equals, 1)
+	c.Assert(xSST.UniqueCount, Equals, 1)
+	c.Assert(xSST.SI, HasLen, 1)
+	xSI := xSST.SI[0]
+	c.Assert(xSI.T, Equals, "A cell!")
 }
 
 
-// 	expectedXLSXSheet := `<?xml version="1.0" encoding="UTF-8"?>
-//   <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
-//     <dimension ref="A1:A1"></dimension>
-//     <sheetData>
-//       <row r="1">
-//         <c r="A1" t="s">
-//           <v>0</v>
-//         </c>
-//       </row>
-//     </sheetData>
-//   </worksheet>`
-// 	expectedXLSXSST := `<?xml version="1.0" encoding="UTF-8"?>
-//   <sst uniqueCount="1">
-//     <si>
-//       <t>A cell!</t>
-//     </si>
-//   </sst>`
-// 	c.Assert(string(xSheet), Equals, expectedXLSXSheet)
-// 	c.Assert(string(xSST), Equals, expectedXLSXSST)
-// }
+func (s *SheetSuite) TestMarshalSheet(c *C) {
+	file := NewFile()
+	sheet := file.AddSheet("Sheet1")
+	row := sheet.AddRow()
+	cell := row.AddCell()
+	cell.Value = "A cell!"
+	refTable := NewSharedStringRefTable()
+	xSheet:= sheet.makeXLSXSheet(refTable)
+
+	output := bytes.NewBufferString(xml.Header)
+	body, err := xml.MarshalIndent(xSheet, "  ", "  ")
+	c.Assert(err, IsNil)
+	c.Assert(body, NotNil)
+	_, err = output.Write(body)
+	c.Assert(err, IsNil)
+	expectedXLSXSheet := `<?xml version="1.0" encoding="UTF-8"?>
+  <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
+    <dimension ref="A1:A1"></dimension>
+    <sheetData>
+      <row r="1">
+        <c r="A1" t="s">
+          <v>0</v>
+        </c>
+      </row>
+    </sheetData>
+  </worksheet>`
+	c.Assert(output.String(), Equals, expectedXLSXSheet)
+}