go语言之路

学会用编程思维解决工作中的问题–Go操作Excel篇

学会用编程思维解决工作中的问题--Go操作Excel篇

老板让我把工作两个月中搜集到的资料整理一份清单,然后晚上发给他。顿时有点慌,这么多文件,难道一个个地去复制吗?

image-20210308052951139

image-20210308053237435

显然是不存在的!

工作的内容无非是要把该目录下的文件名以及文件的大小复制到Excel表中,那我为何不用编程去做呢?

如果你傻到一个一个去复制,那得花多少时间啊!

作为一个gopher,当然还是得用Go语言去完成这件事,img

思路:通过一个for循环,获取目录下所有文件对应的文件名和文件的大小,并写入Excel并保存!

我们要做的第一个事情就是找到一个用Go操作Excel的轮子,当然是去我们的Github了。

比较了两款好用的轮子,最终我选取了star较多的excelize。

image-20210308054017662

然后就是看官方的例子,以便可以快速使用。

package main
import (
    "fmt"
    "github.com/360EntSecGroup-Skylar/excelize/v2"
)
func main() {
    f := excelize.NewFile()
    // Create a new sheet.
    index := f.NewSheet("Sheet2")
    // Set value of a cell.
    f.SetCellValue("Sheet2", "A2", "Hello world.")
    // Set active sheet of the workbook.
    f.SetActiveSheet(index)
    // Save spreadsheet by the given path.
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

基本上不用了解底层,看Demo就可以快速上手。

首先创建一个文件,再去创建一个Sheet,然后将内容写入Cell中,参数是哪个Sheet,位置坐标,以及内容,最后保存文件。

思路明确之后,就可以写代码了。

package main
import (
    "github.com/360EntSecGroup-Skylar/excelize/v2"
    "github.com/spf13/cast"
    "io/ioutil"
)
func main() {
    xlsx := excelize.NewFile()
    index := xlsx.NewSheet("Sheet1")
    info, _ := ioutil.ReadDir("F:\\all-file")
    var location = 1
    for _, f := range info {
        _ = xlsx.SetCellValue("Sheet1", "A" + cast.ToString(location), f.Name())
        _ = xlsx.SetCellValue("Sheet1", "B" + cast.ToString(location), cast.ToString(f.Size()/100)+"Kb")
        _ = xlsx.SetCellValue("Sheet1", "C" + cast.ToString(location), "1")
        location += 1
    }
    xlsx.SetActiveSheet(index)
    _ = xlsx.SaveAs("source.xlsx")
}

首先读取存放所有文件的目录all-file,然后设置一个计数器。

使用一个for循环,每读到该目录的一个文件,就将其写入对用的Cell中,并且location的值加1。

文件读取完之后就退出for循环,并保存到文件source.xlsx中。

image-20210308055536080

就算有几千几万个文件,该代码都能在几秒内完成工作。

丝滑啊!

src=http___img.bjtata.com_img_596623fa6155615e.jpg&refer=http___img.bjtata

openwrt上部署go web项目

上一篇

消息队列之rabbit mq

下一篇

你也可能喜欢

2 条评论

  1. 我的数据3000w行,几秒能处理完不?

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

个人微信公众号

we-tuiguang

qq交流群

群号:1046260719

微信扫一扫

微信扫一扫