1 Star 0 Fork 0

countpoison / xorm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
databook.go 4.01 KB
一键复制 编辑 原始数据 按行查看 历史
xormplus 提交于 2016-12-20 20:45 . added mustMatch parameter
// Copyright 2015 The Xorm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package xorm
import (
"os"
tablib "github.com/agrison/go-tablib"
)
type Databook struct {
XDatabook *tablib.Databook
}
func NewDatabook() *Databook {
db := &Databook{XDatabook: tablib.NewDatabook()}
return db
}
func NewDatabookWithData(sheetName map[string]string, data interface{}, mustMatch bool, headers ...map[string][]string) (*Databook, error) {
s := len(sheetName)
switch data.(type) {
case map[string]*tablib.Dataset:
dataModel1 := data.(map[string]*tablib.Dataset)
d1 := len(dataModel1)
if s != d1 && mustMatch {
return nil, ErrParamsType
}
databook := tablib.NewDatabook()
for k, _ := range dataModel1 {
if _, ok := sheetName[k]; !ok {
return nil, ErrParamsType
}
databook.AddSheet(sheetName[k], dataModel1[k])
}
db := &Databook{XDatabook: databook}
return db, nil
case map[string][]map[string]interface{}:
dataModel2 := data.(map[string][]map[string]interface{})
d2 := len(dataModel2)
if len(headers) != 1 {
return nil, ErrParamsType
}
h := len(headers[0])
if (s != h || s != d2) && mustMatch {
return nil, ErrParamsType
}
databook := tablib.NewDatabook()
for k, _ := range dataModel2 {
if _, ok := sheetName[k]; !ok {
return nil, ErrParamsType
}
if _, ok := headers[0][k]; !ok {
return nil, ErrParamsType
}
dataset, err := NewDatasetWithData(headers[0][k], dataModel2[k], mustMatch)
if err != nil {
return nil, err
}
databook.AddSheet(sheetName[k], dataset)
}
db := &Databook{XDatabook: databook}
return db, nil
default:
return nil, ErrParamsType
}
}
func (databook *Databook) AddSheet(title string, data interface{}, mustMatch bool, headers ...[]string) error {
switch data.(type) {
case *tablib.Dataset:
dataset := data.(*tablib.Dataset)
databook.XDatabook.AddSheet(title, dataset)
return nil
case []map[string]interface{}:
dataSlice := data.([]map[string]interface{})
if len(headers) != 1 {
return ErrParamsType
}
dataset, err := NewDatasetWithData(headers[0], dataSlice, mustMatch)
if err != nil {
return err
}
databook.XDatabook.AddSheet(title, dataset)
return nil
default:
return ErrParamsType
}
}
func (databook *Databook) HTML() *tablib.Exportable {
return databook.XDatabook.HTML()
}
func (databook *Databook) SaveAsHTML(filename string, perm os.FileMode) error {
html := databook.XDatabook.HTML()
return html.WriteFile(filename, perm)
}
func (databook *Databook) JSON() (*tablib.Exportable, error) {
return databook.XDatabook.JSON()
}
func (databook *Databook) SaveAsJSON(filename string, perm os.FileMode) error {
json, err := databook.XDatabook.JSON()
if err != nil {
return err
}
return json.WriteFile(filename, perm)
}
func (databook *Databook) XLSX() (*tablib.Exportable, error) {
return databook.XDatabook.XLSX()
}
func (databook *Databook) SaveAsXLSX(filename string, perm os.FileMode) error {
xlsx, err := databook.XDatabook.XLSX()
if err != nil {
return err
}
return xlsx.WriteFile(filename, perm)
}
func (databook *Databook) XML() (*tablib.Exportable, error) {
return databook.XDatabook.XML()
}
func (databook *Databook) SaveAsXML(filename string, perm os.FileMode) error {
xml, err := databook.XDatabook.XML()
if err != nil {
return err
}
return xml.WriteFile(filename, perm)
}
func (databook *Databook) YAML() (*tablib.Exportable, error) {
return databook.XDatabook.YAML()
}
func (databook *Databook) SaveAsYAML(filename string, perm os.FileMode) error {
yaml, err := databook.XDatabook.YAML()
if err != nil {
return err
}
return yaml.WriteFile(filename, perm)
}
func (databook *Databook) Sheet(title string) tablib.Sheet {
return databook.XDatabook.Sheet(title)
}
func (databook *Databook) Sheets() map[string]tablib.Sheet {
return databook.XDatabook.Sheets()
}
func (databook *Databook) Size() int {
return databook.XDatabook.Size()
}
func (databook *Databook) Wipe() {
databook.XDatabook.Wipe()
}
Go
1
https://gitee.com/countpoison_admin/xorm.git
git@gitee.com:countpoison_admin/xorm.git
countpoison_admin
xorm
xorm
57e9f1759726

搜索帮助