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("======================")
}