亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1 Excelize介紹

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

引入方法

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

2 相關需求與實現(xiàn)

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

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

代碼:

// 寫入數(shù)據(jù)到export/*.xlsx
// datas: map[sheet]每個sheet頁的數(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坐標索引
				cellName, _ := excelize.CoordinatesToCellName(j+1, i+1)
				//fmt.Println("cellName:", cellName)
				// 設置,寫入
				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)
		}
	}
	// 刪除默認工作表
	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ù)校驗的excel文件導出

需求:入?yún)⑹且粋€map,其鍵是每個sheet頁的名字,其值是一個二維切片。在每個sheet頁中依次寫入切片中的數(shù)據(jù)。返回文件名和錯誤信息。數(shù)據(jù)校驗: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)
		// 有效性校驗
		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坐標索引
				cellName, _ := excelize.CoordinatesToCellName(j+1, i+1)
				// 設置,寫入
				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)
}

輸出文件:

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

相關文章

  • GO Cobra Termui庫開發(fā)終端命令行小工具輕松上手

    GO Cobra Termui庫開發(fā)終端命令行小工具輕松上手

    這篇文章主要為大家介紹了GO語言開發(fā)終端命令行小工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • GoLang中Module的基本使用方法

    GoLang中Module的基本使用方法

    Go module是從Go 1.11版本才引入的新功能,下面這篇文章主要給大家介紹了關于GoLang中Module的基本使用方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Golang如何構(gòu)造最佳隨機密碼詳解

    Golang如何構(gòu)造最佳隨機密碼詳解

    人們往往有使用同一密碼的習慣,為了防止數(shù)據(jù)庫意外泄露/破壞和出于保護用戶隱私的目的,下面這篇文章主要給大家介紹了關于Golang如何構(gòu)造最佳隨機密碼的相關資料,需要的朋友可以參考下
    2023-01-01
  • go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實現(xiàn)基本操作詳解

    go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實現(xiàn)基本操作詳解

    這篇文章主要為大家介紹了go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實現(xiàn)基本操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • golang 實現(xiàn)每隔幾分鐘執(zhí)行一個函數(shù)

    golang 實現(xiàn)每隔幾分鐘執(zhí)行一個函數(shù)

    這篇文章主要介紹了golang 實現(xiàn)每隔幾分鐘執(zhí)行一個函數(shù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解golang中bufio包的實現(xiàn)原理

    詳解golang中bufio包的實現(xiàn)原理

    這篇文章主要介紹了詳解golang中bufio包的實現(xiàn)原理,通過分析golang中bufio包的源碼,來了解為什么bufio能夠提高文件讀寫的效率和速度
    2018-01-01
  • golang DNS服務器的簡單實現(xiàn)操作

    golang DNS服務器的簡單實現(xiàn)操作

    這篇文章主要介紹了golang DNS服務器的簡單實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang切片連接成字符串的實現(xiàn)示例

    Golang切片連接成字符串的實現(xiàn)示例

    本文主要介紹了Golang切片連接成字符串的實現(xiàn)示例,可以使用Go語言中的內(nèi)置函數(shù)"String()"可以將字節(jié)切片轉(zhuǎn)換為字符串,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Golang接口型函數(shù)使用小結(jié)

    Golang接口型函數(shù)使用小結(jié)

    接口函數(shù)指的是用函數(shù)實現(xiàn)接口,這樣在調(diào)用的時候就會非常簡便,這種方式適用于只有一個函數(shù)的接口,這里以迭代一個map為例,演示這一實現(xiàn)的技巧,對Golang接口型函數(shù)使用知識感興趣的朋友一起看看吧
    2022-06-06
  • 圖解Golang的GC垃圾回收算法

    圖解Golang的GC垃圾回收算法

    這篇文章主要介紹了圖解Golang的GC垃圾回收算法,詳細的介紹了三種經(jīng)典的算法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論