版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第Go結(jié)合Gin導(dǎo)出Mysql數(shù)據(jù)到Excel表格目錄1、實現(xiàn)目標(biāo)2、使用的庫3、項目目錄4、主要代碼編寫4.1、excelize.go(主要工具類)4.2、userService.go(接受請求)4.2、測試結(jié)果5、文檔代碼地址
1、實現(xiàn)目標(biāo)
Golang使用excelize導(dǎo)出表格到瀏覽器下載或者保存到本地。
后續(xù)導(dǎo)入的話也會寫到這里
2、使用的庫
goget/xuri/excelize/v2
Git地址:
/qax-os/excelize
文檔地址:
https://xuri.me/excelize/zh-hans/base/installation.html#install
3、項目目錄
go-excel
├─app
│├─excelize
││└─excelize.go
│├─model
││└─sysUser.go
│└─service
│└─userService.go
├─common
│└─mysql.go
├─go.mod
├─go.sum
├─main.go
└─setting.json
4、主要代碼編寫
gin還不會老師們可以看:/bei_FengBoby/article/details/124847078
讀取配置文件是用的viper
4.1、excelize.go(主要工具類)
ExportExcelByStruct函數(shù)是從網(wǎng)絡(luò)上直接copy的,研究他這個寫法花了好一會兒,所以也寫上去了,提供大家學(xué)習(xí)
import(
"fmt"
"math/rand"
"net/url"
"reflect"
"strconv"
"time"
"/gin-gonic/gin"
"/xuri/excelize/v2"
var(
defaultSheetName="Sheet1"http://默認(rèn)Sheet名稱
defaultHeight=25.0//默認(rèn)行高度
typelzExcelExportstruct{
file*excelize.File
sheetNamestring//可定義默認(rèn)sheet名稱
funcNewMyExcel()*lzExcelExport{
returnlzExcelExport{file:createFile(),sheetName:defaultSheetName}
//導(dǎo)出基本的表格
func(l*lzExcelExport)ExportToPath(params[]map[string]string,data[]map[string]interface{},pathstring)(string,error){
l.export(params,data)
name:=createFileName()
filePath:=path+"/"+name
err:=l.file.SaveAs(filePath)
returnfilePath,err
//導(dǎo)出到瀏覽器。此處使用的gin框架其他框架可自行修改ctx
func(l*lzExcelExport)ExportToWeb(params[]map[string]string,data[]map[string]interface{},c*gin.Context){
l.export(params,data)
buffer,_:=l.file.WriteToBuffer()
//設(shè)置文件類型
c.Header("Content-Type","application/vnd.ms-excel;charset=utf8")
//設(shè)置文件名稱
c.Header("Content-Disposition","attachment;filename="+url.QueryEscape(createFileName()))
_,_=c.Writer.Write(buffer.Bytes())
//設(shè)置首行
func(l*lzExcelExport)writeTop(params[]map[string]string){
topStyle,_:=l.file.NewStyle(`{"font":{"bold":true},"alignment":{"horizontal":"center","vertical":"center"}}`)
varword='A'
//首行寫入
for_,conf:=rangeparams{
title:=conf["title"]
width,_:=strconv.ParseFloat(conf["width"],64)
line:=fmt.Sprintf("%c1",word)
//設(shè)置標(biāo)題
_=l.file.SetCellValue(l.sheetName,line,title)
//列寬
_=l.file.SetColWidth(l.sheetName,fmt.Sprintf("%c",word),fmt.Sprintf("%c",word),width)
//設(shè)置樣式
_=l.file.SetCellStyle(l.sheetName,line,line,topStyle)
word++
//寫入數(shù)據(jù)
func(l*lzExcelExport)writeData(params[]map[string]string,data[]map[string]interface{}){
lineStyle,_:=l.file.NewStyle(`{"alignment":{"horizontal":"center","vertical":"center"}}`)
//數(shù)據(jù)寫入
varj=2//數(shù)據(jù)開始行數(shù)
fori,val:=rangedata{
//設(shè)置行高
_=l.file.SetRowHeight(l.sheetName,i+1,defaultHeight)
//逐列寫入
varword='A'
for_,conf:=rangeparams{
valKey:=conf["key"]
line:=fmt.Sprintf("%c%v",word,j)
isNum:=conf["is_num"]
//設(shè)置值
ifisNum!="0"{
valNum:=fmt.Sprintf("'%v",val[valKey])
_=l.file.SetCellValue(l.sheetName,line,valNum)
}else{
_=l.file.SetCellValue(l.sheetName,line,val[valKey])
//設(shè)置樣式
_=l.file.SetCellStyle(l.sheetName,line,line,lineStyle)
word++
//設(shè)置行高尾行
_=l.file.SetRowHeight(l.sheetName,len(data)+1,defaultHeight)
func(l*lzExcelExport)export(params[]map[string]string,data[]map[string]interface{}){
l.writeTop(params)
l.writeData(params,data)
funccreateFile()*excelize.File{
f:=excelize.NewFile()
//創(chuàng)建一個默認(rèn)工作表
sheetName:=defaultSheetName
index:=f.NewSheet(sheetName)
//設(shè)置工作簿的默認(rèn)工作表
f.SetActiveSheet(index)
returnf
funccreateFileName()string{
name:=time.Now().Format("2006-01-02-15-04-05")
rand.Seed(time.Now().UnixNano())
returnfmt.Sprintf("excle-%v-%v.xlsx",name,rand.Int63n(time.Now().Unix()))
//excel導(dǎo)出(數(shù)據(jù)源為Struct)[]interface{}
func(l*lzExcelExport)ExportExcelByStruct(titleList[]string,data[]interface{},fileNamestring,sheetNamestring,c*gin.Context)error{
l.file.SetSheetName("Sheet1",sheetName)
header:=make([]string,0)
for_,v:=rangetitleList{
header=append(header,v)
rowStyleID,_:=l.file.NewStyle(`{"font":{"color":"#666666","size":13,"family":"arial"},"alignment":{"vertical":"center","horizontal":"center"}}`)
_=l.file.SetSheetRow(sheetName,"A1",header)
_=l.file.SetRowHeight("Sheet1",1,30)
length:=len(titleList)
headStyle:=Letter(length)
varlastRowstring
varwidthRowstring
fork,v:=rangeheadStyle{
ifk==length-1{
lastRow=fmt.Sprintf("%s1",v)
widthRow=v
iferr:=l.file.SetColWidth(sheetName,"A",widthRow,30);err!=nil{
fmt.Print("錯誤--",err.Error())
rowNum:=1
for_,v:=rangedata{
t:=reflect.TypeOf(v)
fmt.Print("--ttt--",t.NumField())
value:=reflect.ValueOf(v)
row:=make([]interface{
},0)
forl:=0;lt.NumField();l++{
val:=value.Field(l).Interface()
row=append(row,val)
rowNum++
err:=l.file.SetSheetRow(sheetName,"A"+strconv.Itoa(rowNum),row)
_=l.file.SetCellStyle(sheetName,fmt.Sprintf("A%d",rowNum),fmt.Sprintf("%s",lastRow),rowStyleID)
iferr!=nil{
returnerr
disposition:=fmt.Sprintf("attachment;filename=%s.xlsx",url.QueryEscape(fileName))
c.Writer.Header().Set("Content-Type","application/octet-stream")
c.Writer.Header().Set("Content-Disposition",disposition)
c.Writer.Header().Set("Content-Transfer-Encoding","binary")
c.Writer.Header().Set("Access-Control-Expose-Headers","Content-Disposition")
returnl.file.Write(c.Writer)
//Letter遍歷a-z
funcLetter(lengthint)[]string{
v
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年清明節(jié)的春游活動
- 2025年安徽皖維集團招聘筆試及答案
- 2025年大疆招聘2026筆試及答案
- 2026年抗震設(shè)計中的非線性分析技術(shù)
- 2026年度滁州市市直事業(yè)單位公開招聘工作人員65名筆試模擬試題及答案解析
- 2026年橋梁監(jiān)理的現(xiàn)場檢查技巧
- 2026年傳統(tǒng)節(jié)日與民間信仰
- 2026年黑河北安市鐵南街道辦事處公開招聘公益性崗位人員1人考試備考試題及答案解析
- 2026貴州科學(xué)院招聘1人考試備考題庫及答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考黔東南州招聘948人筆試備考題庫及答案解析
- 《廣州天河商圈》課件
- H31341 V2.5 HCIP-TranSmission 傳輸網(wǎng)練習(xí)試題及答案
- 2024年10月自考03291人際關(guān)系學(xué)試題及答案
- 下肢靜脈曲張課件
- (高清版)DZT 0428-2023 固體礦產(chǎn)勘查設(shè)計規(guī)范
- XXX縣村鎮(zhèn)空氣源熱泵區(qū)域集中供熱項目可行性研究報告
- 湖州昆侖億恩科電池材料有限公司年產(chǎn)40000噸鋰離子電池電解液項目環(huán)境影響報告
- 幼兒園班級體弱兒管理總結(jié)
- 肥胖患者圍術(shù)期麻醉管理
- 核酸印跡與分子雜交
- 金屬罐三片罐結(jié)構(gòu)分析
評論
0/150
提交評論