最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go中Excelize處理excel表實(shí)現(xiàn)帶數(shù)據(jù)校驗(yàn)的文件導(dǎo)出

 更新時(shí)間:2023年06月25日 09:36:17   作者:微雨停了  
本文主要介紹了go中Excelize處理excel表實(shí)現(xiàn)帶數(shù)據(jù)校驗(yàn)的文件導(dǎo)出,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1 Excelize介紹

Excelize 是 Go 語(yǔ)言編寫的用于操作 Office Excel 文檔基礎(chǔ)庫(kù)。官方文檔:https://xuri.me/excelize/zh-hans/

引入方法

go get "github.com/xuri/excelize/v2"

2 相關(guān)需求與實(shí)現(xiàn)

2.1 數(shù)據(jù)的excel文件導(dǎo)出

需求:入?yún)⑹且粋€(gè)map,其鍵是每個(gè)sheet頁(yè)的名字,其值是一個(gè)二維切片。在每個(gè)sheet頁(yè)中依次寫入切片中的數(shù)據(jù)。返回文件名和錯(cuò)誤信息。

代碼:

// 寫入數(shù)據(jù)到export/*.xlsx
// datas: map[sheet]每個(gè)sheet頁(yè)的數(shù)據(jù)
// return: 文件名, error
func WriteExcel(datas map[string][][]string) (string, error) {
	file := excelize.NewFile()
	for sheetName, data := range datas {
		index, _ := file.NewSheet(sheetName)
		for i, row := range data {
			for j, val := range row {
				// 列行數(shù)字索引轉(zhuǎn)excel坐標(biāo)索引
				cellName, _ := excelize.CoordinatesToCellName(j+1, i+1)
				//fmt.Println("cellName:", cellName)
				// 設(shè)置,寫入
				file.SetCellValue(sheetName, cellName, val)
			}
		}
		// 創(chuàng)建表格
		file.SetActiveSheet(index)
	}
	filename := "aaa" + ".xlsx"
	_, err := os.ReadDir("aaa/")
	if err != nil {
		// 不存在就創(chuàng)建
		err = os.MkdirAll("aaa/", fs.ModePerm)
		if err != nil {
			fmt.Println(err)
		}
	}
	// 刪除默認(rèn)工作表
	file.DeleteSheet("Sheet1")
	err = file.SaveAs("aaa/" + filename)
	if err != nil {
		return "", err
	}
	return filename, nil
}
func main() {
	datas := make(map[string][][]string)
	datas["xxx"] = [][]string{{"A1", "B1", "C1", "d1", "E1", "G1", "H1", "I1"}, {"A2", "B2", "C2"}, {"A3", "B3", "C3"}}
	datas["yyy"] = [][]string{{"X1", "Y1", "Z1"}, {"X2", "Y2", "Z2"}, {"X3", "Y3", "Z3"}}
	fileName, err := WriteExcel(datas)
	if err != nil {
		fmt.Println("Write excel error: ", err)
		return
	}
	fmt.Println("Write excel success, file name is: ", fileName)

輸出文件:

2.2 帶數(shù)據(jù)校驗(yàn)的excel文件導(dǎo)出

需求:入?yún)⑹且粋€(gè)map,其鍵是每個(gè)sheet頁(yè)的名字,其值是一個(gè)二維切片。在每個(gè)sheet頁(yè)中依次寫入切片中的數(shù)據(jù)。返回文件名和錯(cuò)誤信息。數(shù)據(jù)校驗(yàn):A列只能輸入a,aa,aaa,aaaa;B列只能輸入b,bb;C列只能輸入c,cc,ccc。

代碼:

func WriteExcelValidation(datas map[string][][]string, validations map[string][]string) (string, error) {
	file := excelize.NewFile()
	for sheetName, data := range datas {
		// 創(chuàng)建sheet
		index, _ := file.NewSheet(sheetName)
		// 有效性校驗(yàn)
		for col, validation := range validations {
			dv := excelize.NewDataValidation(true)
			dv.SetSqref(col + "2:" + col + "1048576")
			err := dv.SetDropList(validation)
			if err != nil {
				return "", err
			}
			file.AddDataValidation(sheetName, dv)
		}
		for i, row := range data {
			for j, val := range row {
				// 列行數(shù)字索引轉(zhuǎn)excel坐標(biāo)索引
				cellName, _ := excelize.CoordinatesToCellName(j+1, i+1)
				// 設(shè)置,寫入
				file.SetCellValue(sheetName, cellName, val)
			}
		}
		// 創(chuàng)建表格
		file.SetActiveSheet(index)
	}
	filename := "bbb" + ".xlsx"
	// 創(chuàng)建目錄
	_, err := os.ReadDir("aaa/")
	if err != nil {
		// 不存在就創(chuàng)建
		err = os.MkdirAll("aaa/", fs.ModePerm)
		if err != nil {
			return "", err
		}
	}
	file.DeleteSheet("Sheet1")
	err = file.SaveAs("aaa/" + filename)
	if err != nil {
		return "", err
	}
	return filename, nil
}
func main() {
	validations := make(map[string][]string)
	validations["A"] = []string{"a", "aa", "aaa", "aaaa"}
	validations["B"] = []string{"b", "bb"}
	validations["E"] = []string{"c", "cc", "ccc"}
	datas := make(map[string][][]string)
	datas["xxx"] = [][]string{{"A1", "B1", "C1", "d1", "E1", "G1", "H1", "I1"}, {"A2", "B2", "C2"}, {"A3", "B3", "C3"}}
	datas["yyy"] = [][]string{{"X1", "Y1", "Z1"}, {"X2", "Y2", "Z2"}, {"X3", "Y3", "Z3"}}
	fileName, err := WriteExcelValidation(datas, validations)
	if err != nil {
		fmt.Println("Write excel error: ", err)
		return
	}
	fmt.Println("Write excel success, file name is: ", fileName)
}

輸出文件:

 到此這篇關(guān)于go中Excelize處理excel表實(shí)現(xiàn)帶數(shù)據(jù)校驗(yàn)的文件導(dǎo)出的文章就介紹到這了,更多相關(guān)go Excelize excel導(dǎo)出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Gotify搭建你的消息推送系統(tǒng)

    Gotify搭建你的消息推送系統(tǒng)

    這篇文章主要介紹了Gotify搭建你的消息推送系統(tǒng),今天要分享的是 gotify,是一個(gè)用 go 編寫的消息服務(wù)端,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2024-01-01
  • Go語(yǔ)言實(shí)現(xiàn)UDP協(xié)議及TCP通訊

    Go語(yǔ)言實(shí)現(xiàn)UDP協(xié)議及TCP通訊

    這篇文章介紹了Go語(yǔ)言實(shí)現(xiàn)UDP協(xié)議及TCP通訊的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • go語(yǔ)言檢測(cè)文件是否存在的方法

    go語(yǔ)言檢測(cè)文件是否存在的方法

    這篇文章主要介紹了go語(yǔ)言檢測(cè)文件是否存在的方法,實(shí)例分析了Go語(yǔ)言文件操作的相關(guān)技巧,需要的朋友可以參考下
    2015-03-03
  • 最新評(píng)論

    三明市| 郧西县| 柞水县| 博罗县| 习水县| 通渭县| 固安县| 上犹县| 马边| 昌图县| 辽源市| 东兴市| 成都市| 成都市| 蒙阴县| 库伦旗| 白银市| 霍城县| 凤翔县| 克拉玛依市| 长汀县| 宣城市| 新巴尔虎左旗| 灵璧县| 元氏县| 瑞安市| 保定市| 青田县| 桃园市| 长葛市| 额济纳旗| 台安县| 阳东县| 融水| 铅山县| 剑阁县| 土默特右旗| 龙江县| 衡山县| 昌乐县| 邓州市|