首页 > 其他分享 >GO语言从前端传来的表格数据和表格标题导出到Excel表格中

GO语言从前端传来的表格数据和表格标题导出到Excel表格中

时间:2024-08-26 10:22:38浏览次数:12  
标签:string err Excel interface 表格 GO columns

提示:使用Go将前端表格数据和标题导出到Excel表格中,你可以使用第三方库,如"xlsx"。数据的操作流程遵循:分析数据格式→确定数据对象→解析→构建表格→生成文件。以下是一个简单的示例,展示了如何在Gin框架中实现该功能:

文章目录


一、表格样式

表格是根据时间把数据放入到1-12月为列标题,行为1-31天的表格中,如下所示:
在这里插入图片描述

二、使用步骤

1.引入库

代码如下(示例):

package main

import (
    "fmt"
    "github.com/tealeg/xlsx"
)

2.创建路由

代码如下(示例):

func main() {
    router := gin.Default()

    router.GET("/export", exportToExcel)

    fmt.Println("Server running at http://localhost:8080/")
    log.Fatal(router.Run(":8080"))
}

前端可以使用POST请求将表格数据发送到/export路由。

2.创建exportToExcel函数

代码如下(示例):

func exportToExcel(c *gin.Context) {
    // 假设数据格式为map[string]interface{}
    formData := make(map[string]interface{})

    // 从前端获取数据
    err := c.BindJSON(formData)
    if err!= nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    // 提取标题和数据
    columns := formData["columns"].([]interface{})
    data := formData["data"].([]interface{})

    // 创建Excel文件
    file := xlsx.NewFile()
    sheet, err := file.AddSheet("Sheet1")
    if err!= nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    // 添加标题行
    titleRow := sheet.AddRow()
    for _, column := range columns {
        // 假设标题信息存储在title字段中
        titleCell := titleRow.AddCell()
        titleCell.Value = column.(map[string]interface{})["title"].(string)
    }

    // 添加数据行
    for i, rowData := range data {
        values := rowData.(map[string]interface{})
        row := sheet.AddRow()
        for j := 0; j < len(columns); j++ {
            // 假设数据键对应于列标题
            dataIndex := columns[j].(map[string]interface{})["dataIndex"].(string)
            cell := row.AddCell()
            if value, ok := values[dataIndex]; ok {
                            // 根据数据类型进行相应处理
                switch v := value.(type) {
                case int, int8, int16, int32, int64:
                    cell.SetInt64(value.(int64))
                case float32, float64:
                    cell.SetFloat(value.(float64))
                case string:
                    cell.Value = value.(string)
                default:
                    fmt.Println("Unhandled data type:", v)
                }
            } else {
                // 若数据不存在,则写一个空字符串
                cell.Value = ""
            }
        }
        // 设置行高,根据需要调整
        row.SetHeightCM(1)
        // 在第一列设置行号
        row.Cells[0].Value = strconv.Itoa(i + 1)
    }

    // 设置列宽,根据需要调整
    for j := 0; j < len(columns); j++ {
        columnWidth := 5
        sheet.Col(j).SetWidth(float64(columnWidth))
    }

    // 保存文件
    err = file.Save("your_file_name.xlsx")
    if err!= nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    // 返回成功响应
    c.JSON(http.StatusOK, gin.H{"message": "Excel file exported successfully"})
   }

请注意,你需要将"your_file_name.xlsx"替换为实际要创建的Excel文件名,并根据需要调整列宽和行高等样式。

前端可以使用POST请求将表格数据发送到/export路由,后端使用c.BindJSON(formData)来获取数据。然后,后端处理数据,创建Excel文件,写入标题和数据,最后保存文件。如果一切顺利,后端将返回一个成功的响应给前端。

3.最后结果

在这里插入图片描述


标签:string,err,Excel,interface,表格,GO,columns
From: https://blog.csdn.net/m0_69665878/article/details/141467933

相关文章

  • vue element-ui表格table 表格动态 添加行、删除行、添加列、删除列 自定义表头
         vuetable表格动态添加行、删除行、添加列、删除列自定义表头; 增加一行、删除一行、添加一列、删除一列;每行带输入框input代码1、HTML部分:<template><divclass="app-container"><el-table:data="tableData"borderstyle="width:600px;margin-to......
  • Node.js 安装与使用及连接 MongoDB 的详细教程
    下面我将详细讲解如何安装Node.js、介绍Node.js的脚手架工具、使用Express脚手架创建项目,以及如何安装和连接MongoDB。一、Node.js安装下载Node.js:访问Node.js官方网站。根据你的操作系统选择最新的LTS(长期支持版)版本下载并安装。一般推荐使用LTS版本,因为......
  • golang interface{} Type assertions类型断言 x.(T) 和Type switches类型选择 switch
    在golang的开发中,我们经常会用到类型断言typeassertions和switchx.(type)类型选择,他们都可以对interface{}空接口类型的数据进行类型断言,他们的功能类似但是有区别,区别如下:共同点:都可以对interface{} /any类型的数据进行数据类型的断言区别:  类型断言x.(T)......
  • Django后台管理Xadmin使用DjangoUeditor富文本编辑器
    Django后台管理Xadmin使用DjangoUeditor富文本编辑器一、下载点击github下载https://github.com/twz915/DjangoUeditor31、下载完后解压到跟xadmin同一层级目录:2、解压后名称可能为DjangoUeditor3-master,需要改为DjangoUeditor3、进入DjangoUeditor目录,把DjangoUedit......
  • vscode如何配置go运行环境
    第一步在vscode里面首先下载go编程需要的扩展如图第二步下载需要的工具更新Go工具:ctrl+shift+P搜索Go:Install/UpdateTools:测试......
  • SpringBoot整合MongoDB
    目录什么是MongoDB?SpringBoot整合MongoDB使用MongoDB1.新增文档2.修改文档3.删除文档4.查询文档5.创建索引什么是MongoDB?MongoDB是一种开源的分布式文档型数据库管理系统,它使用类似于JSON的BSON格式(BinaryJSON)来存储数据。MongoDB使用集合(Collections)来组织文......
  • 面试官问什么?Python基础与进阶?介绍Django框架?MySQL数据库索引?
    Catalog自我介绍Python001.Python支持哪些数据类型?01.数字类型02.序列类型03.映射类型04.集合类型05.其他类型06.特点总结002.什么是模块(module),如何导入一个模块?01.导入模块02.`import`和`from...import...`的区别003.高频发问题004.数据去重005.Python中......
  • 基于django+vue摄影网站的设计与实现【开题报告+程序+论文】计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和普及,数字化摄影已成为大众生活的一部分,摄影作品的传播与分享方式也发生了深刻变革。传统的摄影展示与交易方式......
  • 基于django+vue摄影爱好者交流平台【开题报告+程序+论文】计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着数字技术的飞速发展,摄影艺术已不再是专业摄影师的专属领地,越来越多的普通民众也加入了摄影爱好者的行列。他们热衷于捕捉生活中的美好......
  • 基于django+vue社团管理系统【开题报告+程序+论文】计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的普及和学生自主性的增强,校园社团作为培养学生综合素质、促进文化交流的重要平台,其数量与种类日益增多。然而,传统的手工管理......