summaryrefslogtreecommitdiff
path: root/file.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2021-12-27 23:34:14 +0800
committerxuri <xuri.me@gmail.com>2021-12-27 23:49:28 +0800
commit89b85934f60ba0012f3de6da03eb12959e4b4b72 (patch)
tree3d913c2bdabf06b79b7c2f223cfe26b64aacd8cc /file.go
parent6b1e592cbc7b1412da5f6d0badeaf1083117c762 (diff)
This closes #1096, memory usage optimization and another 4 changes
- Unzip shared string table to system temporary file when large inner XML, reduce memory usage about 70% - Remove unnecessary exported variable `XMLHeader`, we can using `encoding/xml` package's `xml.Header` instead of it - Using constant instead of inline text for default XML path - Rename exported option field `WorksheetUnzipMemLimit` to `UnzipXMLSizeLimit` - Unit test and documentation updated
Diffstat (limited to 'file.go')
-rw-r--r--file.go23
1 files changed, 14 insertions, 9 deletions
diff --git a/file.go b/file.go
index e2aeb4a..6c8bd93 100644
--- a/file.go
+++ b/file.go
@@ -14,6 +14,7 @@ package excelize
import (
"archive/zip"
"bytes"
+ "encoding/xml"
"io"
"os"
"path/filepath"
@@ -27,15 +28,15 @@ import (
//
func NewFile() *File {
f := newFile()
- f.Pkg.Store("_rels/.rels", []byte(XMLHeader+templateRels))
- f.Pkg.Store("docProps/app.xml", []byte(XMLHeader+templateDocpropsApp))
- f.Pkg.Store("docProps/core.xml", []byte(XMLHeader+templateDocpropsCore))
- f.Pkg.Store("xl/_rels/workbook.xml.rels", []byte(XMLHeader+templateWorkbookRels))
- f.Pkg.Store("xl/theme/theme1.xml", []byte(XMLHeader+templateTheme))
- f.Pkg.Store("xl/worksheets/sheet1.xml", []byte(XMLHeader+templateSheet))
- f.Pkg.Store("xl/styles.xml", []byte(XMLHeader+templateStyles))
- f.Pkg.Store("xl/workbook.xml", []byte(XMLHeader+templateWorkbook))
- f.Pkg.Store("[Content_Types].xml", []byte(XMLHeader+templateContentTypes))
+ f.Pkg.Store("_rels/.rels", []byte(xml.Header+templateRels))
+ f.Pkg.Store(dafaultXMLPathDocPropsApp, []byte(xml.Header+templateDocpropsApp))
+ f.Pkg.Store(dafaultXMLPathDocPropsCore, []byte(xml.Header+templateDocpropsCore))
+ f.Pkg.Store("xl/_rels/workbook.xml.rels", []byte(xml.Header+templateWorkbookRels))
+ f.Pkg.Store("xl/theme/theme1.xml", []byte(xml.Header+templateTheme))
+ f.Pkg.Store("xl/worksheets/sheet1.xml", []byte(xml.Header+templateSheet))
+ f.Pkg.Store(defaultXMLPathStyles, []byte(xml.Header+templateStyles))
+ f.Pkg.Store(defaultXMLPathWorkbook, []byte(xml.Header+templateWorkbook))
+ f.Pkg.Store(defaultXMLPathContentTypes, []byte(xml.Header+templateContentTypes))
f.SheetCount = 1
f.CalcChain = f.calcChainReader()
f.Comments = make(map[string]*xlsxComments)
@@ -159,6 +160,7 @@ func (f *File) writeToZip(zw *zip.Writer) error {
f.workBookWriter()
f.workSheetWriter()
f.relsWriter()
+ f.sharedStringsLoader()
f.sharedStringsWriter()
f.styleSheetWriter()
@@ -196,6 +198,9 @@ func (f *File) writeToZip(zw *zip.Writer) error {
return true
})
f.tempFiles.Range(func(path, content interface{}) bool {
+ if _, ok := f.Pkg.Load(path); ok {
+ return true
+ }
var fi io.Writer
fi, err = zw.Create(path.(string))
if err != nil {