首页 > 其他分享 >go excel文件处理

go excel文件处理

时间:2023-08-17 10:02:21浏览次数:418  
标签:文件 string val res excel go data strings append

go  excel操作

package util

import (
    "github.com/extrame/xls"
    "github.com/tealeg/xlsx"
    "reflect"
    "strings"
)

// ReadXlsx xlsx解析
func ReadXlsx(sheet *xlsx.Sheet) (res [][]string) {
    temp := make([][]string, len(sheet.Rows))
    for k, row := range sheet.Rows {
        var data []string
        for _, cell := range row.Cells {
            if strings.Index(cell.NumFmt, "yy") > -1 {
                rv := reflect.ValueOf(*cell)
                date1904 := rv.FieldByName("date1904").Bool()
                dateTime, timeErr := cell.GetTime(date1904)
                if timeErr != nil {
                    data = append(data, cell.Value)
                } else {
                    data = append(data, dateTime.Format("2006-01-02 15:04:05"))
                }
            } else {
                data = append(data, cell.Value)
            }
        }
        temp[k] = data
    }
    res = append(res, temp...)
    return res
}

// ReadXls xls解析
func ReadXls(sheet *xls.WorkSheet) (res [][]string) {
    if sheet.MaxRow == 0 {
        return res
    }
    temp := make([][]string, sheet.MaxRow+1)
    for i := 0; i <= int(sheet.MaxRow); i++ {
        row := sheet.Row(i)
        data := make([]string, 0)
        if row.LastCol() > 0 {
            for j := 0; j < row.LastCol(); j++ {
                col := row.Col(j)
                data = append(data, col)
            }
            temp[i] = data
        }
    }
    res = append(res, temp...)
    return res
}

// ExecList2map list转map
func ExecList2map(res [][]string) (result []map[string]string) {
    if len(res) < 2 {
        return result
    }
    //第一行为标题
    title := res[0]
    titleMap := make(map[int]string)
    for index, val := range title {
        if val != "" {
            titleMap[index] = val
        }
    }
    for i := 1; i < len(res); i++ {
        row := res[i]
        rowMap := make(map[string]string)
        for index, val := range row {
            if titleMap[index] != "" {
                sVal := strings.ToLower(val)
                // 处理Excel网址超链接
                if strings.Index(sVal, "(http") > -1 {
                    sCol := strings.Split(sVal, "(http")
                    val = sCol[0]
                }
                // 处理Excel邮箱超链接
                if strings.Index(sVal, "(mailto") > -1 {
                    sCol := strings.Split(sVal, "(mailto")
                    val = sCol[0]
                }
                rowMap[titleMap[index]] = val
            }
        }
        result = append(result, rowMap)
    }
    return result
}

 

标签:文件,string,val,res,excel,go,data,strings,append
From: https://www.cnblogs.com/siyunianhua/p/17636819.html

相关文章

  • SQL SERVER如何修改数据库文件逻辑大小
    要修改数据库文件的逻辑大小,可以使用ALTERDATABASE语句的MODIFYFILE子句。以下是修改数据库文件逻辑大小的步骤:查询当前数据库文件的逻辑大小和物理大小:USEYourDatabaseName;SELECTnameASFileName,sizeASLogicalSizeKB,size*8/1024ASLogica......
  • 重磅发布 |《汽车制造业文件外发数据防泄漏白皮书》免费下载!
    汽车制造业企业数据外发需求频繁,对很多车企来说,不仅有与异地研发机构间、供应商之间的协同研发文件交换,还有与外包供应商及零部件供应商之间的基于价值链的协同关系,这就导致车企需要对外与不同类型企业、组织,进行不同业务需求下的、不同类别的文件交换。传统的文件交换方式会存在......
  • 解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla
    上一章我们介绍了基于Prompt范式的工具调用方案,这一章介绍基于模型微调,支持任意多工具组合调用,复杂调用的方案。多工具调用核心需要解决3个问题,在哪个位置进行工具调用(where),从众多工具中选择哪一个(Which),工具的输入是什么(What)。Where+Which+What,我称之为3W原则,3H它兄......
  • redis配置文件:redis.conf
    配置项及说明配置项名称取值说明daemonizeyes、no是否启用守护进程(进程启动后在后台一直运行)。默认no。port Redis监听端口,默认6379bind 绑定的主机地址(只有符合条件的IP,才能用redis-cli登录该redis服务器并进行操作)bind和protected-mode控制了是否可......
  • .NET Core读取配置文件 配置文件可以是JSON、XML或INI等格式,需要添加 Microsoft.Exten
    .NETCore读取配置文件配置文件可以是JSON、XML或INI等格式需要添加Microsoft.Extensions.Configuration扩展包原文链接:https://pythonjishu.com/qipsfiygesyrqfi/下面是“.NETCore读取配置文件”的完整攻略:1.创建配置文件首先,我们需要在项目中创建一个配置文件,以便存......
  • 统计oracel表空间和用户的数据文件占物理磁盘空间大小
    selectbannerfromv$version;-----统计磁盘空间文件大小SELECT--B.file_name"文件名",A.TABLESPACE_NAME"表空间名",TOTAL"表空间大小",FREE"表空间剩余大小",(TOTAL-FREE)"表空间使用大小",TOTAL/(10......
  • vue3 组合式 api 单文件组件写法
    1Vue3组合式API的基本原理和理念1.1Vue3中的CompositionAPIVue3中的CompositionAPI是一种新的编写组件逻辑的方式,它提供了更好的代码组织、类型推导、测试支持和复用性。相比于Vue2的OptionsAPI,CompositionAPI更加灵活和可扩展。在CompositionAPI中,我们使......
  • CS:GO升级 Linux不再是“法外之地”
    在前天的VAC大规模封禁中,有不少Linux平台的作弊玩家也迎来了“迟到”的VAC封禁。一直以来,Linux就是VAC封禁的法外之地。虽然大部分玩家都使用Windows平台进行游戏。但实际上,使用Linux畅玩CS:GO的玩家也不在少数。以前V社主要打击Windows平台的玩家作弊。而Linux则成为了一......
  • 15 模版方法模式 -- go语言设计模式
    15模版方法模式--go语言设计模式模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤模版方法模式的实现代码packagemainimport"fmt"//抽象类,制作饮料,包裹一个模板的全部实现......
  • Never Gonna Give You Up
    记录被AssimilationIVnevergonnagiveup的瞬间。一看这个\(n\leq20\),直接状压。然后被去重诈骗了\(114514\)秒。因为可以发现最后所有灯都会被点。。。所以其实操作就是一个\(1\simn\)的排列。。。然后直接计算每盏灯的期望和。。。然后用反面法(?)就行了。。。......