網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Excelize是一個(gè)用純Go語(yǔ)言編寫的庫(kù),提供了一組函數(shù),可以對(duì)XLAM / XLSM / XLSX / XLTM / XLTX文件進(jìn)行讀寫。支持讀寫由Microsoft Excel?2007及以后版本生成的電子表格文檔。通過高兼容性支持復(fù)雜組件,并提供流API從具有大量數(shù)據(jù)的工作表中生成或讀取數(shù)據(jù)。該庫(kù)需要Go 1.16或更高版本。
那么本篇文章將會(huì)介紹我們操作Excel的常用功能,如下:
- 生成一個(gè)新的Excel文件
- 向Excel文件中追加內(nèi)容
- 解析Excel文件內(nèi)容
- 使用Http協(xié)議上傳并解析Excel文件
- 使用Http協(xié)議將數(shù)據(jù)轉(zhuǎn)換為Excel文件并下載
1.下載依賴庫(kù)
go get github.com/xuri/excelize # Go Modules使用這個(gè)命令 go get github.com/xuri/excelize/v2
2.具體操作
2.1 生成一個(gè)新的Excel文件
func WriteNewExcel() { f := excelize.NewFile() // 創(chuàng)建一個(gè)sheet index := f.NewSheet("Sheet2") // 根據(jù)sheet和坐標(biāo) 確定一個(gè)值 // 例如f.SetCellValue("Sheet2", "A2", "Hello world.")就是在Sheet表中A列第2行的格子里填入Hello world. f.SetCellValue("Sheet2", "A2", "Hello world.") f.SetCellValue("Sheet1", "B1", 100) f.SetCellValue("Sheet1", "B2", 100) // 將新的sheet添加到Excel中 f.SetActiveSheet(index) // 保存Excel if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) } }
2.2 向Excel文件中追加內(nèi)容
func WriteExcel() { f, _ := excelize.OpenFile("Book1.xlsx") index := f.NewSheet("Sheet2") f.SetCellValue("Sheet2", "A2", "Hello world.") f.SetCellValue("Sheet1", "B1", 100) f.SetCellValue("Sheet1", "B2", 100) f.SetActiveSheet(index) if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) } }
2.3 解析Excel文件內(nèi)容
func ReadExcel() { f, err := excelize.OpenFile("Book1.xlsx") if err != nil { fmt.Println(err) return } defer func() { if err := f.Close(); err != nil { fmt.Println(err) } }() // 根據(jù)sheet和坐標(biāo)讀取某一個(gè)格子的值 cell, err := f.GetCellValue("Sheet1", "B2") if err != nil { fmt.Println(err) return } fmt.Println(cell) // 按行讀取全部 rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\t") } fmt.Println() } }
2.4 使用Http協(xié)議上傳并解析Excel文件
func HttpReadExcel() { f := func(read io.Reader) { file, err := excelize.OpenReader(read) if err != nil { fmt.Println(err) return } for _, item := range file.GetSheetList() { rows, _ := file.GetRows(item) // rows是一個(gè)二維數(shù)組 for i := range rows { strs := rows[i] for j := range strs { str := rows[i][j] fmt.Println(str) } } } } http.HandleFunc("/excel", func(w http.ResponseWriter, r *http.Request) { file, _, err := r.FormFile("file") if err != nil { fmt.Println(err) return } fileBytes, err := ioutil.ReadAll(file) if err != nil { fmt.Println(err) return } reader := bytes.NewReader(fileBytes) f(reader) w.Write([]byte("Hello Http Get!")) }) http.ListenAndServe(":8080", nil) }
2.5 使用Http協(xié)議將數(shù)據(jù)轉(zhuǎn)換為Excel文件并下載
func HttpDownloadExcel() { fun := func(fileName string) *bytes.Reader { f := excelize.NewFile() f.SetCellValue("Sheet1", "B1", 100) err := f.SaveAs(fileName) if err != nil { fmt.Println(err) } var buffer bytes.Buffer _ = f.Write(&buffer) return bytes.NewReader(buffer.Bytes()) } http.HandleFunc("/downloadExcel", func(w http.ResponseWriter, r *http.Request) { reader := fun("Book2.xlsx") // 重新設(shè)置文件名稱 w.Header().Set("Content-Disposition", "attachment; filename="+"Book2.xlsx") io.Copy(w, reader) }) http.ListenAndServe(":8080", nil) }
3.小總結(jié)
以上功能只需靈活擴(kuò)展后基本上就可以覆蓋大部分業(yè)務(wù)了,但是有一點(diǎn)需要注意,在2.5使用Http協(xié)議將數(shù)據(jù)轉(zhuǎn)換為Excel文件并下載這個(gè)操作中,需要將文件進(jìn)行重命名,這個(gè)名稱可以自定義,也可以由服務(wù)端指定,但是需要以相關(guān)文件類型的名稱做后綴,否則會(huì)輸出zip壓縮文件,很難看懂。
原文鏈接:https://blog.csdn.net/Mr_YanMingXin/article/details/127590137
相關(guān)推薦
- 2022-06-02 Pandas實(shí)現(xiàn)DataFrame的簡(jiǎn)單運(yùn)算、統(tǒng)計(jì)與排序_python
- 2023-02-04 golang?Gorm框架講解_Golang
- 2022-05-25 kotlin將網(wǎng)絡(luò)上可以訪問的url圖片轉(zhuǎn)換成Base64字符串
- 2022-07-16 windows安全加固--關(guān)閉非必要端口
- 2022-11-20 Python必知必會(huì)之os模塊實(shí)例詳解_python
- 2022-07-06 C語(yǔ)言中#pragma?once的作用_C 語(yǔ)言
- 2022-03-30 Android?RecyclerView曝光采集的實(shí)現(xiàn)方法_Android
- 2023-12-12 設(shè)置線程名稱(兩種方法)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支