summaryrefslogtreecommitdiff
path: root/excelize.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2019-09-16 01:17:35 +0800
committerxuri <xuri.me@gmail.com>2019-09-16 01:17:35 +0800
commit8922f659788187afa6d0a5d3248e999c2c1bb846 (patch)
tree29b2aae2028eaedc448daef08a5670d6f3ca4604 /excelize.go
parenta3ee098ab60d9528a0d6b7a7c475ea8ff7ebaba5 (diff)
Combine functions:
workBookRelsWriter, drawingRelsWriter into relsWriter; drawingRelsReader, workbookRelsReader, workSheetRelsReader into relsReader; addDrawingRelationships, addSheetRelationships into addRels
Diffstat (limited to 'excelize.go')
-rw-r--r--excelize.go33
1 files changed, 26 insertions, 7 deletions
diff --git a/excelize.go b/excelize.go
index b734e57..4d46b94 100644
--- a/excelize.go
+++ b/excelize.go
@@ -31,7 +31,6 @@ type File struct {
CalcChain *xlsxCalcChain
Comments map[string]*xlsxComments
ContentTypes *xlsxTypes
- DrawingRels map[string]*xlsxWorkbookRels
Drawings map[string]*xlsxWsDr
Path string
SharedStrings *xlsxSST
@@ -42,8 +41,7 @@ type File struct {
DecodeVMLDrawing map[string]*decodeVmlDrawing
VMLDrawing map[string]*vmlDrawing
WorkBook *xlsxWorkbook
- WorkBookRels *xlsxWorkbookRels
- WorkSheetRels map[string]*xlsxWorkbookRels
+ Relationships map[string]*xlsxRelationships
XLSX map[string][]byte
}
@@ -93,13 +91,12 @@ func OpenReader(r io.Reader) (*File, error) {
f := &File{
checked: make(map[string]bool),
Comments: make(map[string]*xlsxComments),
- DrawingRels: make(map[string]*xlsxWorkbookRels),
Drawings: make(map[string]*xlsxWsDr),
Sheet: make(map[string]*xlsxWorksheet),
SheetCount: sheetCount,
DecodeVMLDrawing: make(map[string]*decodeVmlDrawing),
VMLDrawing: make(map[string]*vmlDrawing),
- WorkSheetRels: make(map[string]*xlsxWorkbookRels),
+ Relationships: make(map[string]*xlsxRelationships),
XLSX: file,
}
f.CalcChain = f.calcChainReader()
@@ -176,6 +173,28 @@ func checkSheet(xlsx *xlsxWorksheet) {
xlsx.SheetData = sheetData
}
+// addRels provides a function to add relationships by given XML path,
+// relationship type, target and target mode.
+func (f *File) addRels(relPath, relType, target, targetMode string) int {
+ rels := f.relsReader(relPath)
+ rID := 0
+ if rels == nil {
+ rels = &xlsxRelationships{}
+ }
+ rID = len(rels.Relationships) + 1
+ var ID bytes.Buffer
+ ID.WriteString("rId")
+ ID.WriteString(strconv.Itoa(rID))
+ rels.Relationships = append(rels.Relationships, xlsxRelationship{
+ ID: ID.String(),
+ Type: relType,
+ Target: target,
+ TargetMode: targetMode,
+ })
+ f.Relationships[relPath] = rels
+ return rID
+}
+
// replaceWorkSheetsRelationshipsNameSpaceBytes provides a function to replace
// xl/worksheets/sheet%d.xml XML tags to self-closing for compatible Microsoft
// Office Excel 2007.
@@ -265,7 +284,7 @@ func (f *File) AddVBAProject(bin string) error {
return errors.New("unsupported VBA project extension")
}
f.setContentTypePartVBAProjectExtensions()
- wb := f.workbookRelsReader()
+ wb := f.relsReader("xl/_rels/workbook.xml.rels")
var rID int
var ok bool
for _, rel := range wb.Relationships {
@@ -280,7 +299,7 @@ func (f *File) AddVBAProject(bin string) error {
}
rID++
if !ok {
- wb.Relationships = append(wb.Relationships, xlsxWorkbookRelation{
+ wb.Relationships = append(wb.Relationships, xlsxRelationship{
ID: "rId" + strconv.Itoa(rID),
Target: "vbaProject.bin",
Type: SourceRelationshipVBAProject,