# 多Sheet页数据导出
上一章介绍了单一查询结果集导出到单一文件的相关API。但有时我们也会遇到多个结果集需要导出到单一文件的需求,xorm同样提供了相关API来支持该类需求。
样例代码如下:
~~~
_, results, err := engine.Sqls(map[string]string{"category": "select * from category", "category-16-17": "select * from category where id in (16,17)"}).Execute()
if err != nil {
t.Fatal(err)
}
databook, err := xorm.NewDatabookWithData(
map[string]string{
"category": "category",
"category-16-17": "category-16-17"},
results,
true,
map[string][]string{
"category": []string{"id", "name", "counts", "orders", "createtime", "pid", "lastupdatetime", "status"},
"category-16-17": []string{"id", "name", "counts", "orders", "createtime", "pid", "lastupdatetime", "status"}})
if err != nil {
t.Fatal(err)
}
err = databook.SaveAsXLSX("c:/2.xlsx", 0777)
if err != nil {
t.Fatal(err)
}
err = databook.SaveAsHTML("c:/2.html", 0777)
if err != nil {
t.Fatal(err)
}
err = databook.SaveAsJSON("c:/2.json", 0777)
if err != nil {
t.Fatal(err)
}
err = databook.SaveAsXML("c:/2.xml", 0777)
if err != nil {
t.Fatal(err)
}
err = databook.SaveAsYAML("c:/2.yaml", 0777)
if err != nil {
t.Fatal(err)
}
~~~
## 相关API介绍
* NewDatabook()
新建一个Databook
* NewDatabookWithData(sheetName map[string]string, data interface{}, mustMatch bool, headers ...map[string][]string)
依据数据结果集新建一个Databook
1. sheetName,数据类型为map,key与data,headers的key保持一致,value则为每个sheet页的名称
2. data,数据类型为interface{},但实际只允许接收map[string]*tablib.Dataset,和map[string][]map[string]interface{}两种数据类型。其中key与sheetName,headers保持一致
3. mustMatch,是否检查字段个数与数据匹配
4. headers,数据类型为...map[string][]string,当data传入数据类型为map[string]*tablib.Dataset,则此参数可以省略不传,即使传入也不起作用。当data传入数据类型为map[string][]map[string]interface{}时,headers的key则与sheetName,data保持一致,value为[]string类型,用于确定该sheet输出的字段顺序。headers参数个数最多为1,大于1,则参数格式错误。
以上2个方法返回对象为
~~~
type Databook struct {
XDatabook *tablib.Databook
}
~~~
Databook具有如下方法
* AddSheet(title string, data interface{}, headers ...[]string)
新增一个sheet
1. title,数据类型为string,新增sheet的名字
2. data,新增sheet的数据,数据类型为interface{},但实际只允许接收*tablib.Dataset和[]map[string]interface{}两种数据类型。
3. headers,数据类型为[]string类型,当data传入参数数据类型为*tablib.Dataset,该参数可以省略,即使传入也不起作用。当data传入数据类型为[]map[string]interface{},则headers必须传入一个[]string类型参数,用于确定该sheet输出的字段顺序。headers参数个数最多为1,大于1,则参数格式错误。
* SaveAsHTML(filename string, perm os.FileMode)
导出HTML文件,filename为完整路径,headers为每列的列名,需要结果集中有该字段,此处[]string是为了确定列的顺序,perm为文件权限位
* SaveAsJSON(filename string, perm os.FileMode)
导出JSON文件,filename为完整路径,headers为每列的列名,需要结果集中有该字段,此处[]string是为了确定列的顺序,perm为文件权限位
* SaveAsXLSX(filename string, perm os.FileMode)
导出XLSX文件,filename为完整路径,headers为每列的列名,需要结果集中有该字段,此处[]string是为了确定列的顺序,perm为文件权限位
* SaveAsXML(filename string, perm os.FileMode)
导出XML文件,filename为完整路径,headers为每列的列名,需要结果集中有该字段,此处[]string是为了确定列的顺序,perm为文件权限位
* SaveAsYAML(filename string, perm os.FileMode)
导出YAML文件,filename为完整路径,headers为每列的列名,需要结果集中有该字段,此处[]string是为了确定列的顺序,perm为文件权限位
* Sheet(title string)
获取指定名称的sheet
* Sheets()
获取Databook中的所有sheet,数据类型为map[string]tablib.Sheet
* Size()
返回Databook中sheet个数
* Wipe()
清空Databook中的所有sheet
- xorm
- 创建Orm引擎
- 定义表结构体
- 名称映射规则
- 前缀映射,后缀映射和缓存映射
- 使用Table和Tag改变名称映射
- Column属性定义
- 表结构操作
- 获取数据库信息
- 表操作
- 创建索引和唯一索引
- 同步数据库结构
- 导入导出SQL脚本
- SqlMap及SqlTemplate模板
- 初始化SqlMap配置文件及SqlTemplate模板
- SqlMap及SqlTemplate相关功能API
- SqlMap配置文件及SqlTemplate模板加密存储及解析
- 手动管理SqlMap配置及SqlTemplate模板
- 插入数据
- ORM方式插入数据
- 执行SQL命令插入数据
- 创建时间Created
- 查询和统计数据
- ORM方式查询和统计数据
- 查询条件方法
- 临时开关方法
- Get方法
- Find方法
- Join的使用
- Iterate方法
- Count方法
- Rows方法
- Sum系列方法
- Exist方法
- 子查询
- 执行SQL查询
- 执行SQL查询的11种常用方式
- 查询返回json或xml字符串
- 链式查询据操返回某条记录的某个字段的值
- SqlTemplateClient执行过程
- 关于数据库分页查询
- 更新数据
- ORM方式更新数据
- Update方法
- 乐观锁Version
- 更新时间Updated
- 执行SQL命令更新数据
- 删除数据
- ORM方式删除数据
- Delete方法
- 软删除Deleted
- 执行SQL命令删除数据
- 事务处理
- 简单事务模型
- 嵌套事务模型
- 八种事务类型及事务传播机制
- 简单事务相关API
- 嵌套事务相关API
- 嵌套事务示例代码
- 主从数据库(Master/Slave)读写分离
- 创建引擎组
- 负载策略
- 引擎组其他配置方法
- 数据库读写分离
- 批量混合SQL操作
- SQL Builder
- 缓存
- 事件
- 数据导出
- Dump数据库结构和数据
- 查询结果集导出csv、tsv、xml、json、xlsx、yaml、html
- 多Sheet页数据导出
- 日志
- 连接池
- xorm 工具
- 常见问题
- 感谢支持