1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package excelize
- import (
- "bytes"
- "encoding/xml"
- "io"
- "log"
- )
- func (f *File) calcChainReader() *xlsxCalcChain {
- var err error
- if f.CalcChain == nil {
- f.CalcChain = new(xlsxCalcChain)
- if err = f.xmlNewDecoder(bytes.NewReader(namespaceStrictToTransitional(f.readXML("xl/calcChain.xml")))).
- Decode(f.CalcChain); err != nil && err != io.EOF {
- log.Printf("xml decode error: %s", err)
- }
- }
- return f.CalcChain
- }
- func (f *File) calcChainWriter() {
- if f.CalcChain != nil && f.CalcChain.C != nil {
- output, _ := xml.Marshal(f.CalcChain)
- f.saveFileList("xl/calcChain.xml", output)
- }
- }
- func (f *File) deleteCalcChain(index int, axis string) {
- calc := f.calcChainReader()
- if calc != nil {
- calc.C = xlsxCalcChainCollection(calc.C).Filter(func(c xlsxCalcChainC) bool {
- return !((c.I == index && c.R == axis) || (c.I == index && axis == ""))
- })
- }
- if len(calc.C) == 0 {
- f.CalcChain = nil
- f.Pkg.Delete("xl/calcChain.xml")
- content := f.contentTypesReader()
- content.Lock()
- defer content.Unlock()
- for k, v := range content.Overrides {
- if v.PartName == "/xl/calcChain.xml" {
- content.Overrides = append(content.Overrides[:k], content.Overrides[k+1:]...)
- }
- }
- }
- }
- type xlsxCalcChainCollection []xlsxCalcChainC
- func (c xlsxCalcChainCollection) Filter(fn func(v xlsxCalcChainC) bool) []xlsxCalcChainC {
- var results []xlsxCalcChainC
- for _, v := range c {
- if fn(v) {
- results = append(results, v)
- }
- }
- return results
- }
|