首页 > 其他分享 >Go--生成excel表格,循环赋值并避免重复项

Go--生成excel表格,循环赋值并避免重复项

时间:2024-05-29 14:43:45浏览次数:21  
标签:Group string -- fmt Psa excel Operator Go sheet

先下载第三方依赖包:

go get -u github.com/xuri/excelize/v2

 

假设原数据格式为:

type Data struct {
    Psa      string
    Group    string
    Operator string
}

 

将数据插入新生成的execl表格中,并且当group值相同时,只更新该group的operator值,即最终数据中,group没有相同值

package main

import (
    "fmt"
    "github.com/xuri/excelize/v2"
)

type Data struct {
    Psa      string
    Group    string
    Operator string
}

func generateExcel(data []Data) error {
    // 创建一个新的 Excel 文件
    f := excelize.NewFile()

    // 将第一个工作表的名称定为"sheet"
    sheet := f.GetSheetName(0)

    // 设置表头
    f.SetCellValue(sheet, "A1", "Psa")
    f.SetCellValue(sheet, "B1", "Group")
    f.SetCellValue(sheet, "C1", "Operator")

    // 创建一个map,key 类型为 string (对应 group 字段),value 类型为 int (对应 Excel 表格中的行号)
    groupOperatorMap := make(map[string]int)

    // 设置行数,从2开始,因为第一行是表头
    i := 2

    // 遍历原数据
    for _, value := range data {
        //判断当前 group 是否已经存在于 groupOperatorMap 中,并将 group 对应的行号存储在 idx 变量中
        if idx, ok := groupOperatorMap[value.Group]; ok {
            f.SetCellValue(sheet, fmt.Sprintf("C%d", idx), value.Operator) //如果存在,则更新对应行的 Operator 值
        } else { //如果不存在,则插入新行
            f.SetCellValue(sheet, fmt.Sprintf("A%d", i), value.Psa) //fmt.Sprintf("A%d", i) 根据i值生成excel单元格的值,如"A2"
            f.SetCellValue(sheet, fmt.Sprintf("B%d", i), value.Group)
            f.SetCellValue(sheet, fmt.Sprintf("C%d", i), value.Operator)

            //将当前 group 和对应的行号存储到 groupOperatorMap 中,并将行号递增
            groupOperatorMap[value.Group] = i
            i++
        }
    }

    // 保存 Excel 文件,默认存储当前目录下
    return f.SaveAs("output.xlsx")
}

func main() {
    data := []Data{
        {Psa: "psa1", Group: "group1", Operator: "operator1"},
        {Psa: "psa2", Group: "group2", Operator: "operator2"},
        {Psa: "psa3", Group: "group3", Operator: "operator3"},
        {Psa: "psa1", Group: "group1", Operator: "operator4"},
        {Psa: "psa1", Group: "group4", Operator: "operator5"},
        {Psa: "psa2", Group: "group2", Operator: "operator6"},
    }

    err := generateExcel(data)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Excel file generated successfully.")
    }
}

 

结果展示:

 

标签:Group,string,--,fmt,Psa,excel,Operator,Go,sheet
From: https://www.cnblogs.com/Xinenhui/p/18220266

相关文章

  • esp32-s3-mini-1 otg board, uvc调试记录
    网上购买了一块ESP32-S3-USB-OTG开发板(非乐鑫官方开发板)。准备实现usbuvccamera+lcd显示。使用esp-idf/example/usb/host/uvc进行测试,修改了引脚,对USB供电和数据切换的引脚重新校正,出现报错:0x40056fc9:memcpyinROM0x4200b219:_uvc_process_payloadatC:/Users/yinsu......
  • __dirname is not defined in ES module scope
    在package.json中的type=module的项目中,我创建了一个ts文件,类型是esm的类型。这里的报错是因为我们错误的使用了module的语法到esm的文件中,要解决这个问题的方法有两种,第一种改为module,另一种是改为esm的写法。首先是第一种改为module的写法,那就是把import改为require,然后由于......
  • 从 .NET 到 C++:集合处理的思考
    1.IEnumerable与List的比较在.NET中,IEnumerable和List是两种常用的集合类型,它们有各自的适用场景:IEnumerable<T>:优点:惰性求值,仅在迭代时计算,适用于大数据集或流式数据处理。缺点:不能进行索引访问,没有直接的添加或移除元素的方法。List<T>:优点:支持索引访问,具备......
  • stm8系列--可变频率PWM输出
     PA3STM8S003F3timer2_init();//初始化#definePUL_COUNT4000voidtimer2_init(void){TIM2_DeInit();TIM2_TimeBaseInit(TIM2_PRESCALER_8,PUL_COUNT-1);//62.5HZ2M/8/4000=62.5HZ1个数4usTIM2_OC3Init(TIM2_OCMODE_PWM1,TIM2_OUTPUTS......
  • ChatGPT随笔
    我通过询问周边数位每天使用大模型平均超过两个小时以上的学者,得到他们对于大模型的看法是:“ChatGPT确实很厉害,但是价格难以负担,且使用十分不便。国产的也有用,但是没大用,更多像个高级搜索引擎”。进一步问他们平时最多用大模型做什么,答案基本是:“进行文本翻译、润色文本、生成简单......
  • 天池O2O优惠券使用预测相关学习
    学习网址:https://blog.csdn.net/zimiao552147572/article/details/105940961等1、Data.rename(columns={'col1':'rename_col1'},inplace=True),可以看到col1被重命名为rename_col1,inplace=True表示在原数据进行修改。2、(date()-date()).days()可以是负值吗?应该是可以的3、t、......
  • Centos7 双网卡配置(Nat+hostonly)
    双网卡配置上网异常分析发现内网网段之间可以正常ping通,但却无法连接外网。经过一翻查看分析,是由于多网卡默认启用自动路由引起冲突问题发现背景虚拟机上网,固定静态IP(hostonly模式),在copy虚拟机时候不用管nat或者桥接IP,使用shell直接ssh静态IP访问一、网卡配置cat......
  • 如何批量新建文件夹并命名?3个实用文件重命名技巧请收藏
    如何批量新建文件夹并命名?很多从事文职类工作的小伙伴们应该都会在工作中会遇到关于文件夹批量新建的问题,面对需要新建几百个文件夹还在一个一个手动操作的话,这样的话太影响工作效率了,这里小编就来给大家分享几个批量新建文件夹并命名的方法,希望可以通过这篇文章帮助到你,以后再......
  • Newtonsoft.Json 序列化器的重写
    //TGD_AUDIT_STATUS、TGD_DEPT_ID都是Int32?的数据类型,如果他们的值包含小数点时直接反序列化会报错的,异常是:字符串的格式不正确,所以此时可以进行客户自定义反序列化的规则设定,这样就问题解决了。自定义实现类中,反序列化时调用ReadJson方法,序列化时调用WriteJson方法。stringj......
  • 批量重命名工具分享,附上详细文件批量改名教程(2024年全新版)
    怎么批量重命名文件?作为办公一族难免会遇到一些文件管理难题,面对大量的文件需要进行重命名操作,你还在一个一个地重复操作吗?这样不仅耗费时间还大大地影响工作效率,那有什么简单快速的方法可以批量文件改名吗?答案是当然是有的!今天小编就给大家分享几个亲测好用的批量重命名工具,实......