golang 读取csv文件到excel--推荐使用

解决的难题,

1.解决读取中文乱码的问题;

2.自动化事项

读取csv文件到excel文件中,批量自动化设置

待解决的问题,文件名称的时间与表里时间不一致的问题

package main

import (
	"bytes"
	"encoding/csv"
	"fmt"
	"github.com/xuri/excelize/v2"
	"golang.org/x/text/encoding/simplifiedchinese"
	"golang.org/x/text/transform"
	"io"
	"io/ioutil"
	"strings"
)

// 生成表格数据
func creatxlsx(lists [][]string) {

	//f, err := excelize.OpenFile("施工日志模版.xlsx", excelize.Options{Password: "password"})
	f, err := excelize.OpenFile("施工日志模版.xlsx")
	if err != nil {
		return
	}

	for num, item := range lists {
		year_xq := item[0]
		year_xq_slices := strings.Split(year_xq, " ")

		year := year_xq_slices[0]

		//需要把2016-4-23修改年的格式为 2016年4月23日

		year_lists := strings.Split(year, "-")
		newyea := year_lists[0]
		newmon := year_lists[1]
		newday := year_lists[2]

		newyear_fomat := fmt.Sprintf("%s年%s月%s日", newyea, newmon, newday)
		xq := year_xq_slices[1]
		//xq := year_xq_slices[1]
		//=====================================
		zg := item[1]
		zd := item[2]
		tq := item[3]
		fengli := item[4]

		//sheetname  201302
		//fmt.Println("year===>", year)
		index, err := f.NewSheet(year)
		if err != nil {
			fmt.Println(err)
			return
		}
		err = f.CopySheet(num, index)
		if err != nil {
			return
		}
		//获取每个单元表
		evesheet := f.GetSheetName(num)
		f.SetCellValue(evesheet, "I7", tq)
		f.SetCellValue(evesheet, "I8", fengli)
		f.SetCellValue(evesheet, "I9", zg)
		f.SetCellValue(evesheet, "I10", zd)

		//表格中  年的位置    星期的位置
		f.SetCellValue(evesheet, "P6", newyear_fomat)
		f.SetCellValue(evesheet, "X6", xq)

		//if err := f.SaveAs("Book1.xlsx"); err != nil {
		//	fmt.Println(err)
		//}

	}
	if err := f.SaveAs("Book1.xlsx"); err != nil {
		fmt.Println(err)
	}

}

func readcsvline2() [][]string {
	lists := make([][]string, 0)

	//file, err := os.Open("xy1.csv")
	file, err := ioutil.ReadFile("xy1.csv")
	if err != nil {
		fmt.Println(err)
	}
	//解决读取csv中文乱码的问题
	reader := csv.NewReader(transform.NewReader(bytes.NewReader(file), simplifiedchinese.GBK.NewDecoder()))
	reader.FieldsPerRecord = -1
	// csvdata, err := reader.ReadAll()

	for {
		csvdata, err := reader.Read() // 按行读取数据,可控制读取部分

		if err != nil && err != io.EOF {
			fmt.Println("Error:", err)
			break
		}

		if err == io.EOF {
			break
		}
		lists = append(lists, csvdata)
		//fmt.Println(csvdata)
	}
	//去掉csv文件头的那行
	return lists[1:]

}

func main() {

	lists := readcsvline2()

	creatxlsx(lists)

}

代码与python项目相似:

https://ht666666.blog.csdn.net/article/details/130973792?spm=1001.2014.3001.5502

你可能感兴趣的:(golang语言实战代码,python个人使用代码,excel,golang,开发语言)