基于Beego框架的导入导出Excel

简介: 基于Beego框架的导入导出Excel,以及解决中文文件名乱码问题

1.概述

    导入导出功能是最常见的开发功能之一,这里用beego框架实现,这里采用 github.com/360EntSecGroup-Skylar/excelize 方式实现。

2.功能实现

2.1 安装

安装 github.com/360EntSecGroup-Skylar/excelize

go get -u github.com/360EntSecGroup-Skylar/excelize

2.2 实现代码

package controllers

import (
  "bytes"
  "encoding/base64"
  "encoding/json"
  "errors"
  "github.com/360EntSecGroup-Skylar/excelize"
  "github.com/astaxie/beego/logs"
  "net/http"
  "net/url"
  "path"
  "screen/components"
  "screen/models"
  "strconv"
  "strings"
  "time"

  "github.com/astaxie/beego"
)

// TestController operations for Topo
type TestControllerstruct {
  beego.Controller
}

// URLMapping ...
func (c *TestController) URLMapping() {
  c.Mapping("ExportExcel", c.ExportExcel)
  c.Mapping("ImportExcel", c.ImportExcel)
}

// ExportExcel ...
// @Title Get One
// @Description get Topo by id
// @Param  id    path   string true      "The key for staticblock"
// @Success 200 {object}
// @Failure 403 :id is empty
// @router /export/ [get]
func (c *TestController) ExportExcel() {
  excelize.NewFile()
  file := excelize.NewFile()
  //设置表格头
  title := getTitle()
  file.SetSheetRow("Sheet1", "A1", title)
  list, _ := models.GetTopoByIds(ids)
  //写入数据
  for i := 0; i < 10; i++ {
     file.SetSheetRow("Sheet1", "A"+lint, &[]interface{}{
        i, "name"+i,
     })
  }

  //构造文件名称
  fileName := "导出文件" + time.Now().Format("20060102150405") + ".xlsx"

  // 解决文件名中文乱码问题
  fileName = path.Base(fileName)
  fileName = url.QueryEscape(fileName)

  c.Ctx.Output.Header("Content-type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
  c.Ctx.Output.Header("Content-Disposition", "attachment;filename="+fileName)
  c.Ctx.Output.Header("Pragma", "No-cache")
  c.Ctx.Output.Header("Cache-Control", "No-cache")
  c.Ctx.Output.Header("Expires", "0")
  var buffer bytes.Buffer
  if err := file.Write(&buffer); err != nil {
     logs.Error(err)
  }
  r := bytes.NewReader(buffer.Bytes())
  http.ServeContent(c.Ctx.ResponseWriter, c.Ctx.Request, fileName, time.Now(), r)
}

func getTitle() *[]interface{} {
  var titles = []interface{}{
     "序号", "名称",
  }
  return &titles
}

// ImportExcel ...
// @Title ImportExcel
// @Description import Topo
// @Param  body      body       true    
// @Success 201 {int}
// @Failure 403 body is empty
// @router /import/ [post]
func (c *TestController) ImportExcel() {
  file, h, _ := c.GetFile("file") //获取上传的文件
  ext := path.Ext(h.Filename)
  //验证后缀名是否符合要求
  AllowExtMap := map[string]bool{
     ".xlsx": true,
  }
  if _, ok := AllowExtMap[ext]; !ok {
     c.Data["json"] = "后缀名不符合上传要求"
     c.ServeJSON()
     return
  }

  xlsx, err := excelize.OpenReader(file)
  if err != nil {
     logs.Error(err)
     c.Data["json"] = "读取文件异常"
     c.ServeJSON()
     return
  }

  rows := xlsx.GetRows("Sheet1")
  if rows == nil || len(rows) == 0 {
     c.Data["json"] = "Sheet1不存在或无数据"
     c.ServeJSON()
     return
  }
  // 验证表头是否一直
  titleRow := rows[0]
  title := getTitle()
  for i, v := range *title {
     value := titleRow[i]
     if v != value {
        c.Data["json"] = "标题不符合要求"
        c.ServeJSON()
        return
     }
  }
  count := 0
  for i, row := range rows {
     if i > 0 {

fmt.Println(row[0], row[1])
        count++
     }
  }
  if count == 0 {
     c.Data["json"] = "上传失败"
  } else {
     c.Data["json"] = "上传成功" + strconv.Itoa(count) + "条"
  }
  c.ServeJSON()
}

3.解决文件名中文乱码

如下代码,解决问题

// 解决文件名中文乱码问题
  fileName = path.Base(fileName)
  fileName = url.QueryEscape(fileName)

相关文章
|
数据挖掘 数据库 Python
Django实战:基于Django和openpyxl实现Excel导入导出功能
`openpyxl` 是用于处理 Excel 文件的 Python 库。本文详解其在 Django 项目中的实战应用,涵盖 Excel 文件的生成、下载、上传与解析。
572 0
Django实战:基于Django和openpyxl实现Excel导入导出功能
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
353 0
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
1481 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
1033 1
|
开发框架 算法 .NET
C#使用MiniExcel导入导出数据到Excel/CSV文件
C#使用MiniExcel导入导出数据到Excel/CSV文件
851 0
|
前端开发 Java 开发工具
如何在Spring Boot框架下实现高效的Excel服务端导入导出?
ArtifactId:是项目的唯一标识符,在实际开发中一般对应项目的名称,就是项目根目录的名称。 Group Id,Artfact Id是保证项目唯一性的标识,一般来说如果项目打包上传至maven这样的包管理仓库中。在搜索你的项目时,Group Id,Artfact Id是必要的条件。 Version:版本号,默认0.0.1-SNAPSHOT。SNAPSHOT代表不稳定的版本,与之相对的有RELEASE。 Project type:工程的类型,maven工程还是gradle工程。 Language:语言(Java,Kotlin,Groovy)。
490 0
|
easyexcel Java API
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!