forked from davyxu/tabtoy
/
memfile.go
78 lines (54 loc) · 1.26 KB
/
memfile.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package helper
import (
"errors"
"github.com/tealeg/xlsx"
)
type MemFileData struct {
File TableFile
TableName string
FileName string
}
type MemFile struct {
dataByFileName map[string]*MemFileData
}
func (self *MemFile) VisitAllTable(callback func(data *MemFileData) bool) {
for _, v := range self.dataByFileName {
if !callback(v) {
return
}
}
}
func (self *MemFile) AddFile(filename string, file TableFile) (ret *MemFileData) {
ret = &MemFileData{
File: file,
FileName: filename,
}
self.dataByFileName[filename] = ret
return
}
func (self *MemFile) CreateXLSXFile(filename string) TableSheet {
xfile := xlsx.NewFile()
xfile.AddSheet("Default")
file := NewXlsxFile()
file.(interface {
FromXFile(file *xlsx.File)
}).FromXFile(xfile)
self.AddFile(filename, file)
return file.Sheets()[0]
}
func (self *MemFile) CreateCSVFile(filename string) TableSheet {
file := NewCSVFile()
self.AddFile(filename, file)
return file.Sheets()[0]
}
func (self *MemFile) GetFile(filename string) (TableFile, error) {
if f, ok := self.dataByFileName[filename]; ok {
return f.File, nil
}
return nil, errors.New("file not found: " + filename)
}
func NewMemFile() *MemFile {
return &MemFile{
dataByFileName: make(map[string]*MemFileData),
}
}