分享
golang的excel文件处理
进击的扣子 · · 2704 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
引入excel文件处理包 "github.com/tealeg/xlsx" 直接excel文件进行处理
excel文件导入:
import "github.com/tealeg/xlsx"
//获取文件
file, h, err := this.GetFile("Filename")
if err != nil {
response.Msg = fmt.Sprintf("获取文件异常:%s", err.Error())
this.toJson(&response)
}
defer file.Close()
//校验文件后缀
if !strings.HasSuffix(h.Filename, ".xlsx") {
response.Msg = "文件格式异常"
this.toJson(response)
}
//读取文件
b, err := ioutil.ReadAll(file)
if err != nil {
response.Msg = fmt.Sprintf("读取文件异常:%v", err)
this.toJson(response)
}
//解析文件
zr, err := zip.NewReader(bytes.NewReader(b), int64(len(b)))
if err != nil {
response.Msg = fmt.Sprintf("解析文件异常:%v", err)
this.toJson(response)
}
excelFile, err := xlsx.ReadZipReader(zr)
if err != nil {
response.Msg = fmt.Sprintf("打开文件异常:%v", err)
this.toJson(response)
}
//处理sheet1
serverserverSheet := *excelFile.Sheet["sheet1"]
serverResult, err := ls.Import(serverSheet)
if err != nil {
response.Msg = seelog.Error("导入server异常:",err).Error()
this.toJson(response)
}
result["server"] = append(result["server"], serverResult...)
//处理sheet2
netAssetnetAssetRows := *excelFile.Sheet["网络设备"]
netAssetResult, err := ln.Import(netAssetRows)
if err != nil {
response.Msg = seelog.Error("导入网络设备异常:", err).Error()
this.toJson(response)
}
result["netAsset"] = append(result["netAsset"], netAssetResult...)
excel文件导出:
import "github.com/tealeg/xlsx"
sheet, _ := xlsx.NewFile().AddSheet("sheet1")
//表头行
row := sheet.AddRow()
for _, k := range fields {
if v, ok := fieldsMap[k]; ok {
cell := row.AddCell()
cell.Value = v
}
}
//表数据
for _, datauint := range data {
row = sheet.AddRow()
for _, v := range fields {
//跳过未定义表头的列
if _, ok := fieldsMap[v]; !ok {
continue
}
cell := row.AddCell()
switch value := datauint[v].(type) {
case time.Time:
cell.Value = value.Format(DATETIME_LAYOUT)
default:
cell.Value = fmt.Sprintf("%v", value)
}
}
}
//创建excel文件
file := xlsx.NewFile()
//将生成的sheet加入到excel文件中
_, err = file.AppendSheet(*sheet, sheetName)
if err!=nil{
return nil
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2704 次点击
上一篇:分布式服务架构下的混沌工程实践
下一篇:golang 无限级树状结构
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
引入excel文件处理包 "github.com/tealeg/xlsx" 直接excel文件进行处理
excel文件导入:
import "github.com/tealeg/xlsx"
//获取文件
file, h, err := this.GetFile("Filename")
if err != nil {
response.Msg = fmt.Sprintf("获取文件异常:%s", err.Error())
this.toJson(&response)
}
defer file.Close()
//校验文件后缀
if !strings.HasSuffix(h.Filename, ".xlsx") {
response.Msg = "文件格式异常"
this.toJson(response)
}
//读取文件
b, err := ioutil.ReadAll(file)
if err != nil {
response.Msg = fmt.Sprintf("读取文件异常:%v", err)
this.toJson(response)
}
//解析文件
zr, err := zip.NewReader(bytes.NewReader(b), int64(len(b)))
if err != nil {
response.Msg = fmt.Sprintf("解析文件异常:%v", err)
this.toJson(response)
}
excelFile, err := xlsx.ReadZipReader(zr)
if err != nil {
response.Msg = fmt.Sprintf("打开文件异常:%v", err)
this.toJson(response)
}
//处理sheet1
serverserverSheet := *excelFile.Sheet["sheet1"]
serverResult, err := ls.Import(serverSheet)
if err != nil {
response.Msg = seelog.Error("导入server异常:",err).Error()
this.toJson(response)
}
result["server"] = append(result["server"], serverResult...)
//处理sheet2
netAssetnetAssetRows := *excelFile.Sheet["网络设备"]
netAssetResult, err := ln.Import(netAssetRows)
if err != nil {
response.Msg = seelog.Error("导入网络设备异常:", err).Error()
this.toJson(response)
}
result["netAsset"] = append(result["netAsset"], netAssetResult...)
excel文件导出:
import "github.com/tealeg/xlsx"
sheet, _ := xlsx.NewFile().AddSheet("sheet1")
//表头行
row := sheet.AddRow()
for _, k := range fields {
if v, ok := fieldsMap[k]; ok {
cell := row.AddCell()
cell.Value = v
}
}
//表数据
for _, datauint := range data {
row = sheet.AddRow()
for _, v := range fields {
//跳过未定义表头的列
if _, ok := fieldsMap[v]; !ok {
continue
}
cell := row.AddCell()
switch value := datauint[v].(type) {
case time.Time:
cell.Value = value.Format(DATETIME_LAYOUT)
default:
cell.Value = fmt.Sprintf("%v", value)
}
}
}
//创建excel文件
file := xlsx.NewFile()
//将生成的sheet加入到excel文件中
_, err = file.AppendSheet(*sheet, sheetName)
if err!=nil{
return nil
}