|
|
@ -8,6 +8,55 @@ import (
|
|
|
|
"strings"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Define the empty element and self-close XML tags hack rules for
|
|
|
|
|
|
|
|
// xl/workbook.xml and xl/worksheets/sheet%d.xml.
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
|
|
|
WorkbookRules = []map[string]string{
|
|
|
|
|
|
|
|
{`xmlns:relationships="http://schemas.openxmlformats.org/officeDocument/2006/relationships" relationships:id="`: `r:id="`},
|
|
|
|
|
|
|
|
{`></sheet>`: ` />`},
|
|
|
|
|
|
|
|
{`></workbookView>`: ` />`},
|
|
|
|
|
|
|
|
{`></fileVersion>`: ` />`},
|
|
|
|
|
|
|
|
{`></workbookPr>`: ` />`},
|
|
|
|
|
|
|
|
{`></calcPr>`: ` />`},
|
|
|
|
|
|
|
|
{`></workbookProtection>`: ` />`},
|
|
|
|
|
|
|
|
{`></fileRecoveryPr>`: ` />`},
|
|
|
|
|
|
|
|
{`></hyperlink>`: ` />`},
|
|
|
|
|
|
|
|
{`></tabColor>`: ` />`},
|
|
|
|
|
|
|
|
{`></pageSetUpPr>`: ` />`},
|
|
|
|
|
|
|
|
{`></pane>`: ` />`},
|
|
|
|
|
|
|
|
{`<extLst></extLst>`: ``},
|
|
|
|
|
|
|
|
{`<fileRecoveryPr />`: ``},
|
|
|
|
|
|
|
|
{`<workbookProtection />`: ``},
|
|
|
|
|
|
|
|
{`<pivotCaches></pivotCaches>`: ``},
|
|
|
|
|
|
|
|
{`<externalReferences></externalReferences>`: ``},
|
|
|
|
|
|
|
|
{`<workbookProtection></workbookProtection>`: ``},
|
|
|
|
|
|
|
|
{`<definedNames></definedNames>`: ``},
|
|
|
|
|
|
|
|
{`<fileRecoveryPr></fileRecoveryPr>`: ``},
|
|
|
|
|
|
|
|
{`<workbookPr />`: ``},
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
SheetRules = []map[string]string{
|
|
|
|
|
|
|
|
{`xmlns:relationships="http://schemas.openxmlformats.org/officeDocument/2006/relationships" relationships:id="`: `r:id="`},
|
|
|
|
|
|
|
|
{`<drawing></drawing>`: ``},
|
|
|
|
|
|
|
|
{`<drawing />`: ``},
|
|
|
|
|
|
|
|
{`<hyperlinks></hyperlinks>`: ``},
|
|
|
|
|
|
|
|
{`<tableParts count="0"></tableParts>`: ``},
|
|
|
|
|
|
|
|
{`<picture></picture>`: ``},
|
|
|
|
|
|
|
|
{`<legacyDrawing></legacyDrawing>`: ``},
|
|
|
|
|
|
|
|
{`<tabColor></tabColor>`: ``},
|
|
|
|
|
|
|
|
{`<sheetProtection></sheetProtection>`: ``},
|
|
|
|
|
|
|
|
{`<conditionalFormatting></conditionalFormatting>`: ``},
|
|
|
|
|
|
|
|
{`<extLst></extLst>`: ``},
|
|
|
|
|
|
|
|
{`></tablePart>`: ` />`},
|
|
|
|
|
|
|
|
{`></dimension>`: ` />`},
|
|
|
|
|
|
|
|
{`></selection>`: ` />`},
|
|
|
|
|
|
|
|
{`></sheetFormatPr>`: ` />`},
|
|
|
|
|
|
|
|
{`></printOptions>`: ` />`},
|
|
|
|
|
|
|
|
{`></pageSetup>`: ` />`},
|
|
|
|
|
|
|
|
{`></pageMargins>`: ` />`},
|
|
|
|
|
|
|
|
{`></mergeCell>`: ` />`},
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// NewSheet provice function to greate a new sheet by given index, when
|
|
|
|
// NewSheet provice function to greate a new sheet by given index, when
|
|
|
|
// creating a new XLSX file, the default sheet will be create, when you
|
|
|
|
// creating a new XLSX file, the default sheet will be create, when you
|
|
|
|
// create a new file, you need to ensure that the index is continuous.
|
|
|
|
// create a new file, you need to ensure that the index is continuous.
|
|
|
@ -122,17 +171,6 @@ func replaceRelationshipsNameSpace(workbookMarshal string) string {
|
|
|
|
return strings.Replace(workbookMarshal, oldXmlns, newXmlns, -1)
|
|
|
|
return strings.Replace(workbookMarshal, oldXmlns, newXmlns, -1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// replace relationships ID in worksheets/sheet%d.xml
|
|
|
|
|
|
|
|
func replaceRelationshipsID(workbookMarshal string) string {
|
|
|
|
|
|
|
|
rids := strings.Replace(workbookMarshal, `<drawing rid="" />`, ``, -1)
|
|
|
|
|
|
|
|
rids = strings.Replace(rids, `<hyperlinks></hyperlinks>`, ``, -1)
|
|
|
|
|
|
|
|
rids = strings.Replace(rids, `<tableParts count="0"></tableParts>`, ``, -1)
|
|
|
|
|
|
|
|
rids = strings.Replace(rids, `<picture></picture>`, ``, -1)
|
|
|
|
|
|
|
|
rids = strings.Replace(rids, `<legacyDrawing></legacyDrawing>`, ``, -1)
|
|
|
|
|
|
|
|
rids = strings.Replace(rids, `<tabColor></tabColor>`, ``, -1)
|
|
|
|
|
|
|
|
return strings.Replace(rids, `<drawing rid="`, `<drawing r:id="`, -1)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// SetActiveSheet provide function to set default active sheet of XLSX by given index.
|
|
|
|
// SetActiveSheet provide function to set default active sheet of XLSX by given index.
|
|
|
|
func (f *File) SetActiveSheet(index int) {
|
|
|
|
func (f *File) SetActiveSheet(index int) {
|
|
|
|
var content xlsxWorkbook
|
|
|
|
var content xlsxWorkbook
|
|
|
@ -188,26 +226,20 @@ func (f *File) SetActiveSheet(index int) {
|
|
|
|
|
|
|
|
|
|
|
|
// Replace xl/workbook.xml XML tags to self-closing for compatible Office Excel 2007.
|
|
|
|
// Replace xl/workbook.xml XML tags to self-closing for compatible Office Excel 2007.
|
|
|
|
func workBookCompatibility(workbookMarshal string) string {
|
|
|
|
func workBookCompatibility(workbookMarshal string) string {
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `xmlns:relationships="http://schemas.openxmlformats.org/officeDocument/2006/relationships" relationships:id="`, `r:id="`, -1)
|
|
|
|
for _, rules := range WorkbookRules {
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></sheet>`, ` />`, -1)
|
|
|
|
for k, v := range rules {
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></workbookView>`, ` />`, -1)
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, k, v, -1)
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></fileVersion>`, ` />`, -1)
|
|
|
|
}
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></workbookPr>`, ` />`, -1)
|
|
|
|
}
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></calcPr>`, ` />`, -1)
|
|
|
|
return workbookMarshal
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></workbookProtection>`, ` />`, -1)
|
|
|
|
}
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></fileRecoveryPr>`, ` />`, -1)
|
|
|
|
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></hyperlink>`, ` />`, -1)
|
|
|
|
// replace relationships ID in worksheets/sheet%d.xml
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></tabColor>`, ` />`, -1)
|
|
|
|
func replaceRelationshipsID(workbookMarshal string) string {
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></pageSetUpPr>`, ` />`, -1)
|
|
|
|
for _, rules := range SheetRules {
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `></pane>`, ` />`, -1)
|
|
|
|
for k, v := range rules {
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `<extLst></extLst>`, ``, -1)
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, k, v, -1)
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `<fileRecoveryPr />`, ``, -1)
|
|
|
|
}
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `<workbookProtection />`, ``, -1)
|
|
|
|
}
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `<pivotCaches></pivotCaches>`, ``, -1)
|
|
|
|
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `<externalReferences></externalReferences>`, ``, -1)
|
|
|
|
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `<workbookProtection></workbookProtection>`, ``, -1)
|
|
|
|
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `<definedNames></definedNames>`, ``, -1)
|
|
|
|
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `<fileRecoveryPr></fileRecoveryPr>`, ``, -1)
|
|
|
|
|
|
|
|
workbookMarshal = strings.Replace(workbookMarshal, `<workbookPr />`, ``, -1)
|
|
|
|
|
|
|
|
return workbookMarshal
|
|
|
|
return workbookMarshal
|
|
|
|
}
|
|
|
|
}
|
|
|
|