Merge pull request #155 from dolmen-go/deepcopy-with-reflect
CopySheet() using reflect instead of encoding/gob
This commit is contained in:
commit
5db716d849
|
@ -88,7 +88,6 @@ func TestOpenFile(t *testing.T) {
|
|||
xlsx.SetCellValue("Sheet2", "F16", true)
|
||||
xlsx.SetCellValue("Sheet2", "F17", complex64(5+10i))
|
||||
t.Log(letterOnlyMapF('x'))
|
||||
t.Log(deepCopy(nil, nil))
|
||||
shiftJulianToNoon(1, -0.6)
|
||||
timeFromExcelTime(61, true)
|
||||
timeFromExcelTime(62, true)
|
||||
|
|
12
lib.go
12
lib.go
|
@ -3,7 +3,6 @@ package excelize
|
|||
import (
|
||||
"archive/zip"
|
||||
"bytes"
|
||||
"encoding/gob"
|
||||
"io"
|
||||
"log"
|
||||
"math"
|
||||
|
@ -115,17 +114,6 @@ func intOnlyMapF(rune rune) rune {
|
|||
return -1
|
||||
}
|
||||
|
||||
// deepCopy provides method to creates a deep copy of whatever is passed to it
|
||||
// and returns the copy in an interface. The returned value will need to be
|
||||
// asserted to the correct type.
|
||||
func deepCopy(dst, src interface{}) error {
|
||||
var buf bytes.Buffer
|
||||
if err := gob.NewEncoder(&buf).Encode(src); err != nil {
|
||||
return err
|
||||
}
|
||||
return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
|
||||
}
|
||||
|
||||
// boolPtr returns a pointer to a bool with the given value.
|
||||
func boolPtr(b bool) *bool { return &b }
|
||||
|
||||
|
|
16
sheet.go
16
sheet.go
|
@ -10,6 +10,8 @@ import (
|
|||
"strconv"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/mohae/deepcopy"
|
||||
)
|
||||
|
||||
// NewSheet provides function to create a new sheet by given worksheet name,
|
||||
|
@ -433,18 +435,15 @@ func (f *File) CopySheet(from, to int) error {
|
|||
if from < 1 || to < 1 || from == to || f.GetSheetName(from) == "" || f.GetSheetName(to) == "" {
|
||||
return errors.New("Invalid worksheet index")
|
||||
}
|
||||
return f.copySheet(from, to)
|
||||
f.copySheet(from, to)
|
||||
return nil
|
||||
}
|
||||
|
||||
// copySheet provides function to duplicate a worksheet by gave source and
|
||||
// target worksheet name.
|
||||
func (f *File) copySheet(from, to int) error {
|
||||
func (f *File) copySheet(from, to int) {
|
||||
sheet := f.workSheetReader("sheet" + strconv.Itoa(from))
|
||||
worksheet := xlsxWorksheet{}
|
||||
err := deepCopy(&worksheet, &sheet)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
worksheet := deepcopy.Copy(sheet).(*xlsxWorksheet)
|
||||
path := "xl/worksheets/sheet" + strconv.Itoa(to) + ".xml"
|
||||
if len(worksheet.SheetViews.SheetView) > 0 {
|
||||
worksheet.SheetViews.SheetView[0].TabSelected = false
|
||||
|
@ -452,14 +451,13 @@ func (f *File) copySheet(from, to int) error {
|
|||
worksheet.Drawing = nil
|
||||
worksheet.TableParts = nil
|
||||
worksheet.PageSetUp = nil
|
||||
f.Sheet[path] = &worksheet
|
||||
f.Sheet[path] = worksheet
|
||||
toRels := "xl/worksheets/_rels/sheet" + strconv.Itoa(to) + ".xml.rels"
|
||||
fromRels := "xl/worksheets/_rels/sheet" + strconv.Itoa(from) + ".xml.rels"
|
||||
_, ok := f.XLSX[fromRels]
|
||||
if ok {
|
||||
f.XLSX[toRels] = f.XLSX[fromRels]
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// SetSheetVisible provides function to set worksheet visible by given worksheet
|
||||
|
|
Loading…
Reference in New Issue