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
    评论
好的,以下是使用 Element UI Table 显示给定数据的示例代码: ```html <template> <div> <el-table :data="tableData"> <el-table-column prop="ming_cheng" label="项目名称"></el-table-column> <el-table-column prop="yusuan_jine" label="预算金额"></el-table-column> <el-table-column prop="zi_jin_lai_yuan" label="资金来源"></el-table-column> <el-table-column prop="zhong_biao_shang" label="中标商"></el-table-column> <el-table-column prop="zhong_biao_shi_jian" label="中标时间"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { tableData: [ { yusuan_jine: "2333", ming_cheng: "增加视频监控存储设备项目", zi_jin_lai_yuan: "yn", zhong_biao_shang: "测试单位", zhong_biao_shi_jian: "2023-04-09 14:00:07", }, { ming_cheng: "医疗器械清洗工作站(器械预处理)", zi_jin_lai_yuan: "yn", zhong_biao_shang: "测试单位", zhong_biao_shi_jian: "2023-05-12 00:00:00", }, { yusuan_jine: "3000", ming_cheng: "医用冷藏箱采购", zi_jin_lai_yuan: "yn", zhong_biao_shang: "测试单位", zhong_biao_shi_jian: "2023-05-26 16:54:23", }, { yusuan_jine: "200", ming_cheng: "服务器采购", zi_jin_lai_yuan: "yn", zhong_biao_shang: "江西云数", zhong_biao_shi_jian: "2023-05-21 00:00:00", }, { yusuan_jine: "20000", ming_cheng: "摄像头采购测试", zi_jin_lai_yuan: "yn", zhong_biao_shang: "江西云数", zhong_biao_shi_jian: "2023-05-25 00:00:00", }, { yusuan_jine: "3000", ming_cheng: "医用冷藏箱采购", zi_jin_lai_yuan: "yn", zhong_biao_shang: "江西云数", zhong_biao_shi_jian: "2023-05-25 00:00:00", }, { yusuan_jine: "2333", ming_cheng: "增加视频监控存储设备项目", zi_jin_lai_yuan: "yn", zhong_biao_shang: "保利香槟", zhong_biao_shi_jian: "2023-05-28 18:00:33", }, ], }; }, }; </script> ``` 这段代码将给定的数据渲染成一个表格表格包含五列:项目名称、预算金额、资金来源、中标商和中标时间。你可以将这段代码复制到你的 Vue.js 工程中,然后根据实际情况修改数据和列配置即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我变了_我没变

随意 。。。

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

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

打赏作者

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

抵扣说明:

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

余额充值