Browse Source

Fix type data in relationships.

Geoffrey J. Teale 11 years ago
parent
commit
50066933d4
4 changed files with 25 additions and 9 deletions
  1. 1 4
      file.go
  2. 3 2
      file_test.go
  3. 18 2
      lib.go
  4. 3 1
      lib_test.go

+ 1 - 4
file.go

@@ -167,10 +167,7 @@ func (f *File) MarshallParts() (map[string]string, error) {
 	if err != nil {
 	if err != nil {
 		return parts, err
 		return parts, err
 	}
 	}
-	sheetId := fmt.Sprintf("rId%d", sheetIndex)
-	sheetPath := "sharedStrings.xml"
-	workbookRels[sheetId] = sheetPath
-	sheetIndex++
+
 	xWRel := workbookRels.MakeXLSXWorkbookRels()
 	xWRel := workbookRels.MakeXLSXWorkbookRels()
 
 
 	parts["xl/_rels/workbook.xml.rels"], err = marshal(xWRel)
 	parts["xl/_rels/workbook.xml.rels"], err = marshal(xWRel)

+ 3 - 2
file_test.go

@@ -167,9 +167,10 @@ func (l *FileSuite) TestMarshalFile(c *C) {
 	// workbook.xml.rels
 	// workbook.xml.rels
 	expectedXLSXWorkbookRels := `<?xml version="1.0" encoding="UTF-8"?>
 	expectedXLSXWorkbookRels := `<?xml version="1.0" encoding="UTF-8"?>
   <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
   <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
-    <Relationship Id="rId1" Target="worksheets/sheet1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"></Relationship>
-    <Relationship Id="rId2" Target="worksheets/sheet2.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"></Relationship>
+    <Relationship Id="rId1" Target="worksheets/sheet1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"></Relationship>
+    <Relationship Id="rId2" Target="worksheets/sheet2.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"></Relationship>
     <Relationship Id="rId3" Target="sharedStrings.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"></Relationship>
     <Relationship Id="rId3" Target="sharedStrings.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"></Relationship>
+    <Relationship Id="rId4" Target="styles.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"></Relationship>
   </Relationships>`
   </Relationships>`
 	c.Assert(parts["xl/_rels/workbook.xml.rels"], Equals, expectedXLSXWorkbookRels)
 	c.Assert(parts["xl/_rels/workbook.xml.rels"], Equals, expectedXLSXWorkbookRels)
 
 

+ 18 - 2
lib.go

@@ -451,8 +451,9 @@ func readStylesFromZipFile(f *zip.File) (*xlsxStyles, error) {
 type WorkBookRels map[string]string
 type WorkBookRels map[string]string
 
 
 func (w *WorkBookRels) MakeXLSXWorkbookRels() xlsxWorkbookRels {
 func (w *WorkBookRels) MakeXLSXWorkbookRels() xlsxWorkbookRels {
+	relCount := len(*w)
 	xWorkbookRels := xlsxWorkbookRels{}
 	xWorkbookRels := xlsxWorkbookRels{}
-	xWorkbookRels.Relationships = make([]xlsxWorkbookRelation, len(*w))
+	xWorkbookRels.Relationships = make([]xlsxWorkbookRelation, relCount + 2)
 	for k, v := range(*w) {
 	for k, v := range(*w) {
 		index, err := strconv.Atoi(k[3:len(k)])
 		index, err := strconv.Atoi(k[3:len(k)])
 		if err != nil {
 		if err != nil {
@@ -461,8 +462,23 @@ func (w *WorkBookRels) MakeXLSXWorkbookRels() xlsxWorkbookRels {
 		xWorkbookRels.Relationships[index -1] = xlsxWorkbookRelation{
 		xWorkbookRels.Relationships[index -1] = xlsxWorkbookRelation{
 			Id: k,
 			Id: k,
 			Target: v,
 			Target: v,
-			Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"}
+			Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"}
 	}
 	}
+
+	relCount++
+	sheetId := fmt.Sprintf("rId%d", relCount)
+	xWorkbookRels.Relationships[relCount -1] = xlsxWorkbookRelation{
+			Id: sheetId,
+			Target: "sharedStrings.xml",
+			Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"}
+
+	relCount++
+	sheetId = fmt.Sprintf("rId%d", relCount)
+	xWorkbookRels.Relationships[relCount -1] = xlsxWorkbookRelation{
+			Id: sheetId,
+			Target: "styles.xml",
+		Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"}
+
 	return xWorkbookRels
 	return xWorkbookRels
 }
 }
 
 

+ 3 - 1
lib_test.go

@@ -144,7 +144,9 @@ func (l *LibSuite) TestWorkBookRelsMarshal(c *C) {
 	rels["rId1"] = "worksheets/sheet.xml"
 	rels["rId1"] = "worksheets/sheet.xml"
 	expectedXML := `<?xml version="1.0" encoding="UTF-8"?>
 	expectedXML := `<?xml version="1.0" encoding="UTF-8"?>
   <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
   <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
-    <Relationship Id="rId1" Target="worksheets/sheet.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"></Relationship>
+    <Relationship Id="rId1" Target="worksheets/sheet.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"></Relationship>
+    <Relationship Id="rId2" Target="sharedStrings.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"></Relationship>
+    <Relationship Id="rId3" Target="styles.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"></Relationship>
   </Relationships>`
   </Relationships>`
 	xRels := rels.MakeXLSXWorkbookRels()
 	xRels := rels.MakeXLSXWorkbookRels()