当前位置:网站首页>使用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
边栏推荐
- IPage can display data normally, but total is always equal to 0
- Energy conservation and creating energy gap
- And play the little chestnut of dynamic agent
- Target detection series - detailed explanation of the principle of fast r-cnn
- ImportError: No module named ‘Tkinter‘
- An article was opened to test the real situation of outsourcing companies
- Steps and FAQs of connecting windows Navicat to Alibaba cloud server MySQL
- Jenkins reported an error. Illegal character: '\ufeff'. Class, interface or enum are required
- I 用c l 栈与队列的相互实现
- UNIX commands often used in work
猜你喜欢

Detailed explanation of miracast Technology (I): Wi Fi display

IPage can display data normally, but total is always equal to 0

Basic series of SHEL script (III) for while loop

How to delete the virus of inserting USB flash disk copy of shortcut to

Import CV2 prompt importerror: libgl so. 1: Cannot open shared object file: no such file or directory

Docker installs MySQL and uses Navicat to connect
![[software testing] 03 -- overview of software testing](/img/1e/0b6458160e34e43f021ea4797de70a.jpg)
[software testing] 03 -- overview of software testing

2022年PMP项目管理考试敏捷知识点(7)

(tool use) how to make the system automatically match and associate to database fields by importing MySQL from idea and writing SQL statements

iNFTnews | 喝茶送虚拟股票?浅析奈雪的茶“发币”
随机推荐
C learning notes
Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
Use of Pai platform
How to deal with excessive memory occupation of idea and Google browser
[vscode] search using regular expressions
Graduation thesis project local deployment practice
Rough notes of C language (2) -- constants
公安专业知识--哔哩桐老师
Pytorch has been installed in anaconda, and pycharm normally runs code, but vs code displays no module named 'torch‘
Now there are HTML files and MVC made with vs (connected to the database). How can they be connected?
(top) pretty girl binary color code portal
Word import literature -mendeley
Unity UGUI不同的UI面板或者UI之间如何进行坐标匹配和变换
Matrix and TMB package version issues in R
I can't stand the common annotations of idea anymore
Clickhouse database installation deployment and remote IP access
U-boot initialization and workflow analysis
[untitled]
[solved] there is something wrong with the image
CADD课程学习(5)-- 构建靶点已知的化合结构(ChemDraw)