用go语言制作读取excel模板批量生成表格工具
生活随笔
收集整理的這篇文章主要介紹了
用go语言制作读取excel模板批量生成表格工具
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前面我已經用python實現過了,具體可以看:
https://blog.csdn.net/sinolzeng/article/details/113972040
https://blog.csdn.net/sinolzeng/article/details/113973018
但是,因為有朋友的電腦是沒有部署python環境的,而用pyinstaller打包的玩意會很大很慢,所以,我就干脆用go再實現一遍吧,以后的小工具我看可以考慮用go語言來實現了。
或者,aardio也是個好玩意,在windows平臺上造小工具最好用的我覺得其實是aardio。就是官方論壇倒閉了有點可惜。不過接下來可能我也不需要造那么多的小工具了,畢竟都七七八八了。
上代碼,如果有go環境的話直接編譯一下就可以了:
package mainimport ("bufio""fmt""io""math""os""regexp"//"strconv""strings""time""github.com/360EntSecGroup-Skylar/excelize" )var tmp stringfunc now() string {n := time.Now()return n.Format("2006-01-02 15:04:05") //go語言誕生的時間 }func getAxisY(count int) string {arr := [27]string{"", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}mod := count % 26divisor := int(math.Floor(float64(count) / 26))if mod == 0 && divisor > 0 {mod = 26divisor -= 1}return arr[divisor] + arr[mod] }func isDir(path string) bool {s, err := os.Stat(path)if err != nil {return false}return s.IsDir() }//自己編寫一個函數,接收兩個文件路徑 func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {srcFile, err := os.Open(srcFileName)if err != nil {fmt.Printf("open file err=%v\n", err)}defer srcFile.Close()//通過srcfile,找到Readerreader := bufio.NewReader(srcFile)//打開dstFileNamedstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)if err != nil {fmt.Printf("open file err=%v\n", err)return}//通過dstFile,找到Writerwriter := bufio.NewWriter(dstFile)defer dstFile.Close()return io.Copy(writer, reader) }func mission() bool {pwd, _ := os.Getwd()_, err := os.Stat(pwd + "\\模板.xlsx")if !os.IsNotExist(err) { //讀取到模板fmt.Println("載入模板...")_, err := os.Stat(pwd + "\\數據.xlsx")if !os.IsNotExist(err) { //讀取到數據fmt.Println("載入數據...")dataxlsx, err := excelize.OpenFile(pwd + "\\數據.xlsx")if err != nil {fmt.Println(err)}sheetname := dataxlsx.GetSheetName(dataxlsx.GetActiveSheetIndex())rows, _ := dataxlsx.GetRows(sheetname)positions := rows[0]// for k, v := range positions {// match, _ := regexp.MatchString("^[a-zA-Z]+[0-9]+$", v)// if !match {// fmt.Println("【數據.xlsx第一行中的第" + getAxisY(k+1) + "列位置填寫格式錯誤,請重新檢查】...")// return true// }// }reg := regexp.MustCompile(`[\/\\\:\*\?\"\<\>\|]`) //去掉不能用來作為文件或文件夾名的符號output := pwd + "\\output" + reg.ReplaceAllString(now(), "_")if !isDir(output) {err := os.Mkdir(output, os.ModePerm)if err != nil {fmt.Println(err)}}for row := 1; row < len(rows); row++ {if len(rows[row]) == 0 || reg.ReplaceAllString(rows[row][0], "_") == "" {continue}filename := output + "\\" + reg.ReplaceAllString(rows[row][0], "_") + ".xlsx"CopyFile(filename, pwd+"\\模板.xlsx")currentxlsx, err := excelize.OpenFile(filename)if err != nil {fmt.Println(err)}sheetname = currentxlsx.GetSheetName(currentxlsx.GetActiveSheetIndex())for col, value := range rows[row] {match, _ := regexp.MatchString("^[a-zA-Z]+[0-9]+$", positions[col])if match {currentxlsx.SetCellStr(sheetname, strings.ToUpper(positions[col]), value)}}currentxlsx.Save()//fmt.Println(now() + " 第" + strconv.Itoa(row) + "個表填寫完成,共" + strconv.Itoa(len(rows)-1) + "個...")}} else {fmt.Println("讀取不到數據,請將你要處理的excel數據命名為【數據.xlsx】并放到exe同路徑下...")return true}} else {fmt.Println("讀取不到模板,請將你要處理的excel模板命名為【模板.xlsx】并放到exe同路徑下...")return true}return true }func main() {fmt.Println(now() + " 任務開始...")mission()fmt.Println(now() + " 任務完成,請按回車鍵退出...")fmt.Scanln(&tmp) }最后是打包說明和程序:https://download.csdn.net/download/sinolzeng/15446706
總結
以上是生活随笔為你收集整理的用go语言制作读取excel模板批量生成表格工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用JavaScript实现列数据的标出重
- 下一篇: 用go语言制作读取excel模板批量生成