当前位置:网站首页>Use go language to read TXT file and write it into Excel
Use go language to read TXT file and write it into Excel
2022-07-05 07:27:00 【Humorous Jing Kejun】
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(" Failed to write row cells ", err)
return false
}
}
return true
}
func getFilePath() (dirname, filepath string) {
/* Define variables to receive console parameters */
Folder name
//var dirname string
//
file name
//var path string
flag.StringVar(&dirname, "d", "", " The name of the folder where the file is stored The default is empty. ")
flag.StringVar(&filepath, "f", "", " File list names written in a specific order , The default is empty. ")
flag.Parse()
return dirname, filepath
}
func main() {
var filePathList []string
sheetName := "Sheet1"
if dirname, filepath := getFilePath(); dirname == "" && filepath == "" {
logrus.Info(" perform ./main -h Check usage ")
os.Exit(-1)
} else {
if dirname != "" {
logrus.Info("dirname Not empty ")
// Get information about files or directories
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(" The file list name is not empty ")
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: Write cells
if res := writeData(f, sheetName, start+1, target); res != true {
logrus.Println(res, "err")
return
}
// step3: merge cell
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(" Failed to merge cells ", err)
return
}
// step4: Add color
// Table fill color
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
}
}
// Save the file according to the specified path
now := time.Now() // Get the current time
timeString := now.Format("2006_01_02_15_04")
if err := f.SaveAs("target1_" + timeString + ".xlsx"); err != nil {
logrus.Println(" preservation Book1.xlsx Failure ", err)
return
}
}
Reference resources :
https://xuri.me/excelize/zh-hans/sheet.html
边栏推荐
- ORACLE CREATE SEQUENCE,ALTER SEQUENCE,DROP SEQUENCE
- Simple operation of running water lamp (keil5)
- 611. Number of effective triangles
- [vscode] recommended plug-ins
- Unforgettable summary of 2021
- Simple operation with independent keys (hey, a little fancy) (keil5)
- How can Oracle SQL statements modify fields that are not allowed to be null to allow nulls?
- Eclipse project recompile, clear cache
- Idea push project to code cloud
- [software testing] 04 -- software testing and software development
猜你喜欢
随机推荐
SD_ CMD_ RECEIVE_ SHIFT_ REGISTER
HDU1232 畅通工程(并查集)
Reading literature sorting 20220104
剑指 Offer 56 数组中数字出现的次数(异或)
Microservice registry Nacos introduction
Machine learning Seaborn visualization
2022.06.27_每日一题
Negative number storage and type conversion in programs
Do you choose pandas or SQL for the top 1 of data analysis in your mind?
2022.06.27_ One question per day
Graduation thesis project local deployment practice
Netease to B, soft outside, hard in
Concurrent programming - how to interrupt / stop a running thread?
[framework] multi learner
Basic series of SHEL script (I) variables
Hdu1231 maximum continuous subsequence (divide and conquer or dynamic gauge or double pointer)
golang定时器使用踩的坑:定时器每天执行一次
Now there are HTML files and MVC made with vs (connected to the database). How can they be connected?
Target detection series - detailed explanation of the principle of fast r-cnn
[software testing] 06 -- basic process of software testing