golang读取excel数据,写入sqlite3

golang读取excel数据,返回一个 []map[string]string

然后读取[]map[string]string,写入到sqlite3中。


package main

import (
	"database/sql"
	"fmt"
	"github.com/360EntSecGroup-Skylar/excelize"
	_ "github.com/mattn/go-sqlite3"
	"log"
)

//定义数据库的全局变量信息
const (
	dbDriverName = "sqlite3"
	dbname       = "./datacheck.db"
)

func ReadExcel_one(filename string) []map[string]string {
	ret := []map[string]string{}
	f, err := excelize.OpenFile(filename)
	if err != nil {
		fmt.Println("读取excel文件出错", err.Error())
		return ret
	}

	rows := f.GetRows("data")  //获取data工作薄中的所有数据
	cols := []string{}

	for i, row := range rows {
		if i == 0 { //取得第一行的所有数据---execel表头,并且把表头存入cols切片中
			for _, colCell := range row {
				cols = append(cols, colCell)
				//println("value:=", cols, colCell, i)

			}
			//fmt.Println("列信息", cols)

		} else { //不是第一行的数据【除了表头的其他数据】
			theRow := map[string]string{}
			for j, colCell := range row {
				k := cols[j]
				//fmt.Println("value:", j, k)
				//fmt.Println("+++++++++++++++++")
				theRow[k] = colCell
			}
			//fmt.Println("row=", theRow)
			//fmt.Println("=======================")
			ret = append(ret, theRow)
			//fmt.Println("ret=", ret)
		}
	}

	return ret

}

func main() {

	db, err := sql.Open(dbDriverName, dbname)
	if err != nil {
		fmt.Println(err)
	}

	//调用函数获取一个 []map[string]string的结果,然后插入数据库
	fmt.Println("读取数据中...请稍等....")
	ones := ReadExcel_one("sxall.xlsx") //读取excel表格中所有信息到 []map[string]string

	//colums := []string{"摄相机名称(必填)", "摄像机国标编号", "flag"} //你需要的excel表格中的字段信息,
	var name, gbid, flag string

	for k, v := range ones {
		fmt.Println("k==", k, "v==", v) //v是一个map对象,包含表格所有字段的一个map信息

		//v是一个map对象,包含表格所有字段的一个map信息
		//直接获取map中,你需要字段的值就可以了,直接插入数据库,如果需要多个字段,继续在这里v就可以了
        //这里的名称都是来自excel表格,放入需要的字段信息
		name = v["摄相机名称(必填)"]
		gbid = v["摄像机国标编号"]
		flag = v["flag"]

		fmt.Println("ht value...", name, "##", gbid, "&&&&", flag)

		//sql语句,把对应的值插入到数据库中
		sql := `insert into netwl (gbid, devicename,flag) values(?,?,?)`
		stmt, _ := db.Prepare(sql)
		_, err := stmt.Exec(gbid, name, flag)
		if err != nil {
			log.Fatalln("插入数据失败")
		}
	}
	fmt.Println("======================")

}