当前位置:网站首页>使用go语言读取txt文件写入excel中
使用go语言读取txt文件写入excel中
2022-07-05 07:25:00 【幽默的荆轲君】
package main
// usage:
// go mod init
// go mod tidy
// go env -w GO111MODULE=on
// go env -w GOPROXY=https://goproxy.cn,direct
// go get github.com/sirupsen/logrus
// go get github.com/xuri/excelize/v2
// go build
import (
"flag"
"fmt"
"github.com/sirupsen/logrus"
"github.com/xuri/excelize/v2"
"io/ioutil"
"log"
"os"
"strconv"
"strings"
"time"
)
func getData(filepath string) [][]string {
logrus.Info("this function is used to getData,filepath is -->>", filepath)
content, err := ioutil.ReadFile(filepath)
var target [][]string
if err != nil {
panic(err)
}
contentList := strings.Split(strings.TrimSpace(string(content)), "\r\n")
for _, val := range contentList {
target = append(target, strings.Split(val, " "))
}
return target
}
func writeData(f *excelize.File, sheetName string, number int, cellList [][]string) bool {
logrus.Info("this function is used to writeData")
for i, line := range cellList {
tmp := "B" + strconv.Itoa(i+number)
if err := f.SetSheetRow(sheetName, tmp, &line); err != nil {
logrus.Println("写入行单元格失败", err)
return false
}
}
return true
}
func getFilePath() (dirname, filepath string) {
/* 定义变量接收控制台参数 */
文件夹名
//var dirname string
//
文件名
//var path string
flag.StringVar(&dirname, "d", "", "存放文件的文件夹名 默认为空")
flag.StringVar(&filepath, "f", "", "按特定顺序写的文件列表名,默认为空")
flag.Parse()
return dirname, filepath
}
func main() {
var filePathList []string
sheetName := "Sheet1"
if dirname, filepath := getFilePath(); dirname == "" && filepath == "" {
logrus.Info("执行./main -h 查看用法")
os.Exit(-1)
} else {
if dirname != "" {
logrus.Info("dirname不为空")
//获取文件或目录相关信息
fileInfoList, err := ioutil.ReadDir(dirname)
if err != nil {
log.Fatal(err)
}
fmt.Println(len(fileInfoList))
for i := range fileInfoList {
filePathList = append(filePathList, dirname+"/"+fileInfoList[i].Name())
}
logrus.Info(filePathList, "case1")
} else {
logrus.Info("文件列表名不为空")
content, err := ioutil.ReadFile(filepath)
if err != nil {
panic(err)
}
filePathList = strings.Split(strings.TrimSpace(string(content)), "\r\n")
logrus.Info(filePathList, "case2")
}
}
f := excelize.NewFile()
logrus.Info("this function is used to getData")
start := 0
for _, filePath := range filePathList {
// step1: get data
logrus.Info(filePath)
target := getData(filePath)
logrus.Info(target, len(target))
titleTmp := "A" + strconv.Itoa(start+1)
if err := f.SetCellDefault(sheetName, titleTmp, filePath); err != nil {
logrus.Println(err, "err")
return
}
// step2: 写入单元格
if res := writeData(f, sheetName, start+1, target); res != true {
logrus.Println(res, "err")
return
}
// step3: 合并单元格
firstString := "A" + strconv.Itoa(start+1)
start += len(target)
endString := "A" + strconv.Itoa(start)
logrus.Println(firstString, endString)
if err := f.MergeCell(sheetName, firstString, endString); err != nil {
logrus.Println("合并单元格失败", err)
return
}
// step4: 加颜色
// 表格填充颜色
style, err := f.NewStyle(&excelize.Style{
Alignment: &excelize.Alignment{
Horizontal: "center", Vertical: "center"},
Fill: excelize.Fill{
Type: "pattern", Color: []string{
"#FFFF00"}, Pattern: 1},
})
if err != nil {
logrus.Println(err)
return
}
err = f.SetCellStyle(sheetName, "A1", endString, style)
if err := f.SetColWidth(sheetName, "A", "A", 75); err != nil {
logrus.Println(err)
return
}
}
// 根据指定路径保存文件
now := time.Now() //获取当前时间
timeString := now.Format("2006_01_02_15_04")
if err := f.SaveAs("target1_" + timeString + ".xlsx"); err != nil {
logrus.Println("保存Book1.xlsx失败", err)
return
}
}
参考:
https://xuri.me/excelize/zh-hans/sheet.html
边栏推荐
- PowerManagerService(一)— 初始化
- Selenium element positioning
- M2DGR 多源多场景 地面机器人SLAM数据集
- Steps and FAQs of connecting windows Navicat to Alibaba cloud server MySQL
- Today, share the wonderful and beautiful theme of idea + website address
- 2022年PMP项目管理考试敏捷知识点(7)
- Chapter 2: try to implement a simple bean container
- 纯碱是做什么的?
- Graduation thesis project local deployment practice
- Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
猜你喜欢
第 2 章:小试牛刀,实现一个简单的Bean容器
2022年PMP项目管理考试敏捷知识点(7)
iNFTnews | 喝茶送虚拟股票?浅析奈雪的茶“发币”
DelayQueue延迟队列的使用和场景
【无标题】
Machine learning Seaborn visualization
Solve tensorfow GPU modulenotfounderror: no module named 'tensorflow_ core. estimator‘
How to deal with excessive memory occupation of idea and Google browser
Jenkins reported an error. Illegal character: '\ufeff'. Class, interface or enum are required
Negative number storage and type conversion in programs
随机推荐
[solved] there is something wrong with the image
2022 PMP project management examination agile knowledge points (7)
R language learning notes 1
Rough notes of C language (1)
Mipi interface, DVP interface and CSI interface of camera
Binary search (half search)
Matrix and TMB package version issues in R
[node] differences among NPM, yarn and pnpm
UNIX commands often used in work
PostMessage communication
Clickhouse database installation deployment and remote IP access
ORACLE CREATE SEQUENCE,ALTER SEQUENCE,DROP SEQUENCE
Miracast技术详解(一):Wi-Fi Display
Unity ugui how to match and transform coordinates between different UI panels or uis
Using GEE plug-in in QGIS
2022.06.27_每日一题
氢氧化钠是什么?
C#学习笔记
Delayqueue usage and scenarios of delay queue
Selenium element positioning