Go結(jié)合Gin導(dǎo)出Mysql數(shù)據(jù)到Excel表格_第1頁
Go結(jié)合Gin導(dǎo)出Mysql數(shù)據(jù)到Excel表格_第2頁
Go結(jié)合Gin導(dǎo)出Mysql數(shù)據(jù)到Excel表格_第3頁
Go結(jié)合Gin導(dǎo)出Mysql數(shù)據(jù)到Excel表格_第4頁
Go結(jié)合Gin導(dǎo)出Mysql數(shù)據(jù)到Excel表格_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論