Browse Source

Add count to style/borders element.

Geoffrey J. Teale 11 years ago
parent
commit
4e5c6a0161
3 changed files with 28 additions and 17 deletions
  1. 3 3
      file_test.go
  2. 5 5
      sheet_test.go
  3. 20 9
      xmlStyle.go

+ 3 - 3
file_test.go

@@ -84,10 +84,10 @@ func (l *FileSuite) TestReadStylesFromZipFile(c *C) {
 	fill = xlsxFile.styles.Fills.Fill[2]
 	c.Assert(fill.PatternFill.PatternType, Equals, "solid")
 
-	borderCount = len(xlsxFile.styles.Borders)
+	borderCount = xlsxFile.styles.Borders.Count
 	c.Assert(borderCount, Equals, 2)
 
-	border = xlsxFile.styles.Borders[1]
+	border = xlsxFile.styles.Borders.Border[1]
 	c.Assert(border.Left.Style, Equals, "thin")
 	c.Assert(border.Right.Style, Equals, "thin")
 	c.Assert(border.Top.Style, Equals, "thin")
@@ -421,7 +421,7 @@ func (l *FileSuite) TestMarshalFile(c *C) {
         </patternFill>
       </fill>
     </fills>
-    <borders>
+    <borders count="2">
       <border>
         <left></left>
         <right></right>

+ 5 - 5
sheet_test.go

@@ -86,11 +86,11 @@ func (s *SheetSuite) TestMakeXLSXSheetAlsoPopulatesXLSXSTyles(c *C) {
 	c.Assert(styles.Fills.Fill[0].PatternFill.FgColor.RGB, Equals, "FFFFFFFF")
 	c.Assert(styles.Fills.Fill[0].PatternFill.BgColor.RGB, Equals, "00000000")
 
-	c.Assert(len(styles.Borders), Equals, 2)
-	c.Assert(styles.Borders[0].Left.Style, Equals, "none")
-	c.Assert(styles.Borders[0].Right.Style, Equals, "thin")
-	c.Assert(styles.Borders[0].Top.Style, Equals, "none")
-	c.Assert(styles.Borders[0].Bottom.Style, Equals, "thin")
+	c.Assert(styles.Borders.Count, Equals, 2)
+	c.Assert(styles.Borders.Border[0].Left.Style, Equals, "none")
+	c.Assert(styles.Borders.Border[0].Right.Style, Equals, "thin")
+	c.Assert(styles.Borders.Border[0].Top.Style, Equals, "none")
+	c.Assert(styles.Borders.Border[0].Bottom.Style, Equals, "thin")
 
 	c.Assert(len(styles.CellStyleXfs), Equals, 2)
 	// The 0th CellStyleXf could just be getting the zero values by default

+ 20 - 9
xmlStyle.go

@@ -19,7 +19,7 @@ import (
 type xlsxStyles struct {
 	Fonts        xlsxFonts    `xml:"fonts,omitempty"`
 	Fills        xlsxFills    `xml:"fills,omitempty"`
-	Borders      []xlsxBorder `xml:"borders>border,omitempty"`
+	Borders      xlsxBorders  `xml:"borders,omitempty"`
 	CellStyleXfs []xlsxXf     `xml:"cellStyleXfs>xf,omitempty"`
 	CellXfs      []xlsxXf     `xml:"cellXfs>xf,omitempty"`
 	NumFmts      []xlsxNumFmt `xml:numFmts>numFmt,omitempty"`
@@ -98,6 +98,15 @@ type xlsxColor struct {
 	RGB string `xml:"rgb,attr,omitempty"`
 }
 
+// xlsxBorders directly maps the borders element in the namespace
+// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
+// currently I have not checked it for completeness - it does as much
+// as I need.
+type xlsxBorders struct {
+	Count  int          `xml:"count,attr"`
+	Border []xlsxBorder `xml:"border,omitempty"`
+}
+
 // xlsxBorder directly maps the border element in the namespace
 // http://schemas.openxmlformats.org/spreadsheetml/2006/main -
 // currently I have not checked it for completeness - it does as much
@@ -166,11 +175,11 @@ func (styles *xlsxStyles) getStyle(styleIndex int) (style Style) {
 		style.ApplyFill = xf.ApplyFill || styleXf.ApplyFill
 		style.ApplyFont = xf.ApplyFont || styleXf.ApplyFont
 
-		if xf.BorderId > -1 && xf.BorderId < len(styles.Borders) {
-			style.Border.Left = styles.Borders[xf.BorderId].Left.Style
-			style.Border.Right = styles.Borders[xf.BorderId].Right.Style
-			style.Border.Top = styles.Borders[xf.BorderId].Top.Style
-			style.Border.Bottom = styles.Borders[xf.BorderId].Bottom.Style
+		if xf.BorderId > -1 && xf.BorderId < styles.Borders.Count {
+			style.Border.Left = styles.Borders.Border[xf.BorderId].Left.Style
+			style.Border.Right = styles.Borders.Border[xf.BorderId].Right.Style
+			style.Border.Top = styles.Borders.Border[xf.BorderId].Top.Style
+			style.Border.Bottom = styles.Borders.Border[xf.BorderId].Bottom.Style
 		}
 
 		if xf.FillId > -1 && xf.FillId < styles.Fills.Count {
@@ -219,9 +228,11 @@ func (styles *xlsxStyles) addFill(xFill xlsxFill) (index int) {
 	return
 }
 
-func (styles *xlsxStyles) addBorder(xBorder xlsxBorder) int {
-	styles.Borders = append(styles.Borders, xBorder)
-	return len(styles.Borders) - 1
+func (styles *xlsxStyles) addBorder(xBorder xlsxBorder) (index int) {
+	styles.Borders.Border = append(styles.Borders.Border, xBorder)
+	index = styles.Borders.Count
+	styles.Borders.Count += 1
+	return
 }
 
 func (styles *xlsxStyles) addCellStyleXf(xCellStyleXf xlsxXf) int {