基于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)

相关文章
|
15天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
58 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
5月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
82 0
|
3月前
|
开发框架 算法 .NET
C#使用MiniExcel导入导出数据到Excel/CSV文件
C#使用MiniExcel导入导出数据到Excel/CSV文件
79 0
|
5月前
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
301 1
|
5月前
|
Java API Spring
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
524 1
|
5月前
|
前端开发 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)。
|
5月前
|
easyexcel Java API
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
|
1月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
|
3月前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
46 0
|
1月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
50 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档

热门文章

最新文章