2.4 使用Http协议上传并解析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是一个二维数组
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协议将数据转换为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")
// 重新设置文件名称
w.Header().Set("Content-Disposition", "attachment; filename="+"Book2.xlsx")
io.Copy(w, reader)
})
http.ListenAndServe(":8080", nil)
}
3 小总结
以上功能只需灵活扩展后基本上就可以覆盖大部分业务了,但是有一点需要注意,在2.5使用Http协议将数据转换为Excel文件并下载这个操作中,需要将文件进行重命名,这个名称可以自定义,也可以由服务端指定,但是需要以相关文件类型的名称做后缀,否则会输出zip压缩文件,很难看懂。
今天的分享就到这里~
标签:rows,http,file,err,nil,Excel,func,Go,搞懂 From: https://blog.51cto.com/u_15654567/5824832