当前位置:网站首页>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

原网站

版权声明
本文为[Humorous Jing Kejun]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207050725192063.html