Zhong__Go读取Excel表格

时间:2021.09.28

环境:Windows

目的:Go读取Excel表格内容

说明:融合了读取加密文档、输出颜色和内容控制、倒计时退出等功能,对于读取Excel只做简单的操作

作者:Zhong QQ交流群:121160124 欢迎加入!

 

首先新建一个xlsx格式的Excel文档  设置密码加密  适当输入一些内容

新建mian.go文件  内容如下

package main

import (
   "bufio"
   "fmt"
   "os"
   "strings"
   "syscall"
   "unsafe"
   "time"
   "strconv"
   "unicode"
   "github.com/360EntSecGroup-Skylar/excelize/v2"
   "github.com/gookit/color"
)

func main() {
   is_true := true
   c := 0
   var f *excelize.File

   for is_true {
      if c > 2 {
         color.Error.Println("阿西吧!超过规定密码输入次数!")
         time.Sleep(time.Second * 3)
         return
      }

      sss_code := Prompt("请输入18位密码")

      //读取加密的文档
      _f, err := excelize.OpenFile("sss.xlsx", excelize.Options{Password: sss_code})
      if err != nil {
         color.Warn.Println("密码不正确或Excel文件不存在!\n")
         c++
      } else {
         is_true = false
         f = _f
      }
   }

   // 内容
   color.Secondary.Println("数据信息:\n\n")

   // 获取 Sheet1 上所有单元格
   rows, err := f.GetRows("Sheet1")
   if err != nil {
      fmt.Println(err)

      return
   }

   k := 0  // 行计数
   for _, row := range rows {
      j := 0  // 列计数
      for _, colCell := range row {
         tb := 25
         c := HansNum(colCell)
         tb = tb - c
         // 如果是第一行
         if k == 0 {
            color.Style{color.OpBold, color.FgRed}.Printf("%-"+strconv.Itoa(tb)+"s", colCell)
         // 如果是其它行的第一列
         } else if j == 0 {
            color.Style{color.FgCyan, color.OpBold}.Printf("%-"+strconv.Itoa(tb)+"s", colCell)
            j++
         } else if j == 1 {
            color.Style{color.OpBold, color.FgBlue}.Printf("%-"+strconv.Itoa(tb)+"s", colCell)
            j++
         } else if j == 2 {
            if len(colCell) >= 3 {
               first_char := colCell[0:1]
               middle_char := colCell[1:len(colCell)-1]
               lase_char := colCell[len(colCell)-1]
               color.Printf("<fg=11aa23>%s</><bg=255,255,255,1>%s</><fg=11aa23>%s</>", string(first_char), string(middle_char), string(lase_char))
            } else {
               color.Style{color.FgCyan, color.OpBold}.Printf("%-"+strconv.Itoa(tb)+"s", colCell)
            }
            j++
         } else {
            fmt.Printf("%-"+strconv.Itoa(tb)+"s", colCell)
         }

      }
      //fmt.Println()
      color.Yellowln("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -")
      //fmt.Println()
      k++
   }

   //定时退出程序
   n := 180
   color.Info.Println("\n\nTips: 鼠标左键查看内容与锁定程序 右键复制内容与释放程序\n")

   tick := time.Tick(1 * time.Second)
   for exit_program := n; exit_program > 0; exit_program-- {
      color.Red.Printf("\r%ds 后将自动退出程序 ... ", exit_program)
      <-tick
   }
}

var getStdHandle, getConsoleMode, setConsoleMode *syscall.LazyProc

func init() {
   lib := syscall.NewLazyDLL("Kernel32.dll")
   getStdHandle = lib.NewProc("GetStdHandle")
   getConsoleMode = lib.NewProc("GetConsoleMode")
   setConsoleMode = lib.NewProc("SetConsoleMode")
}

func Prompt(msg string) string {
   color.Info.Println(msg + ": \n")
   handle, _, _ := getStdHandle.Call(uintptr(^uint(10) + 1))
   var mode uint
   getConsoleMode.Call(handle, uintptr(unsafe.Pointer(&mode)))
   newMode := mode & ^uint(4)
   setConsoleMode.Call(handle, uintptr(newMode))
   passwd, err := bufio.NewReader(os.Stdin).ReadString('\n')
   setConsoleMode.Call(handle, uintptr(mode))
   if err != nil {
      panic(err)
   }
   return strings.TrimSpace(passwd)
}

// 检查是否是中文
func HansNum(str string) (count int) {
   for _, v := range str {
      if unicode.Is(unicode.Han, v) {
         count++
      }
   }
   return
}

 

 

关注微信公众号  加入QQ交流群 121160124

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel? 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。使用本类库要求使用的 Go 语言为 1.10 或更高版本。 安装: go get github.com/360EntSecGroup-Skylar/excelize 如果您使用 Go Modules 管理软件,请使用下面的命令来安装最新版本。 go get github.com/360EntSecGroup-Skylar/excelize/v2 功能: 1、创建 Excel 文档 2、读取 Excel 文档 3、在 Excel 文档中创建图表 使用 Excelize 生成图表十分简单,仅需几行代码。您可以根据工作表中的已有数据构建图表,或向工作表中添加数据并创建图表。 4、向 Excel 文档中插入图片 更新日志: v2.4.0 新增功能 新增 GetCellRichText API,支持根据给定的工作表名称获取富文本 SetPageLayout 和 GetPageLayout 现已支持设置和获取页面打印缩放比例、指定单色打印、起始页码 SetSheetPrOptions 和 GetSheetPrOptions 现已支持设置和获取工作表标签页颜色 SetCellHyperLink 支持设置屏幕提示文字与显示文字,相关 issue #790 创建数据透视表时新增支持 ShowError 选项 流式 API 支持设置单元格公式, 相关 issue #625 公式计算引擎支持不等于运算符 嵌套公式函数现在支持将单元格引用用作参数 支持指定是否设置图表数据系列格式为自动填充颜色 新增 152 项公式函数支持: ATAN, AVERAGE, AVERAGEA, BESSELI, BESSELJ, BIN2DEC, BIN2HEX, BIN2OCT, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, CHAR, CHOOSE, CLEAN, CODE, COLUMN, COLUMNS, COMPLEX, CONCAT, CONCATENATE, COUNT, COUNTBLANK, CUMIPMT, CUMPRINC, DATE, DATEDIF, DB, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DOLLARDE, DOLLARFR, EFFECT, ENCODEURL, EXACT, FALSE, FIND, FINDB, FISHER, FISHERINV, FIXED, FV, FVSCHEDULE, GAMMA, GAMMALN, HARMEAN, HEX2BIN, HEX2DEC, HEX2OCT, HLOOKUP, IF, IFERROR, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN, IPMT, IRR, ISTEXT, ISPMT, KURT, LARGE, LEFT, LEFTB, LEN, LENB, LOOKUP, LOWER, MAX, MID, MIDB, MIN, MINA, MIRR, N, NOMINAL, NORM.DIST, NORMDIST, NORM.INV, NORMINV, NORM.S.DIST, NORMSDIST, NORM.S.INV, NORMSINV, NOT, NOW, NPER, NPV, OCT2BIN, OCT2DEC, OCT2HEX, PDURATION, PERCENTILE.INC, PERCENTILE, PERMUT, PERMUTATIONA, PMT, POISSON.DIST, POISSON, PPMT, PROPER, QUARTILE, QUARTILE.INC, REPLACE, REPLACEB, REPT, RIGHT, RIGHTB, ROMAN, ROW, R

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我变了_我没变

随意 。。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值