当前位置:网站首页>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
边栏推荐
- 1290_ Implementation analysis of prvtaskistasksuspended() interface in FreeRTOS
- [software testing] 02 -- software defect management
- Miracast技术详解(一):Wi-Fi Display
- ModuleNotFoundError: No module named ‘picamera‘
- How to deal with excessive memory occupation of idea and Google browser
- 2022 PMP project management examination agile knowledge points (7)
- 2022.06.27_每日一题
- Idea to view the source code of jar package and some shortcut keys (necessary for reading the source code)
- Solve tensorfow GPU modulenotfounderror: no module named 'tensorflow_ core. estimator‘
- 公安专业知识--哔哩桐老师
猜你喜欢
I 用c I 实现队列
[node] NVM version management tool
Ugnx12.0 initialization crash, initialization error (-15)
Negative number storage and type conversion in programs
PowerManagerService(一)— 初始化
Target detection series - detailed explanation of the principle of fast r-cnn
Hdu1231 maximum continuous subsequence (divide and conquer or dynamic gauge or double pointer)
【idea】Could not autowire. No beans of xxx type found
【Node】nvm 版本管理工具
Mipi interface, DVP interface and CSI interface of camera
随机推荐
GPIO port bit based on Cortex-M3 and M4 with operation macro definition (can be used for bus input and output, STM32, aducm4050, etc.)
I implement queue with C I
Basic series of SHEL script (II) syntax + operation + judgment
Cookie operation
Raspberry pie 4B arm platform aarch64 PIP installation pytorch
Rough notes of C language (1)
Pytorch has been installed in anaconda, and pycharm normally runs code, but vs code displays no module named 'torch‘
[software testing] 04 -- software testing and software development
I can't stand the common annotations of idea anymore
ORACLE CREATE SEQUENCE,ALTER SEQUENCE,DROP SEQUENCE
window navicat连接阿里云服务器mysql步骤及常见问题
The mutual realization of C L stack and queue in I
HDU1232 畅通工程(并查集)
golang定时器使用踩的坑:定时器每天执行一次
Course learning accumulation ppt
Simple use of timeunit
Clickhouse database installation deployment and remote IP access
Basic series of SHEL script (III) for while loop
氢氧化钠是什么?
And let's play dynamic proxy (extreme depth version)