# 多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 工具
- 常見問題
- 感謝支持