# 多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