提交 8afedea5 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

generate sqlite tables from excel

上级 22aec936
......@@ -31,8 +31,9 @@ func Upgrade() {
sqls := make([]string, 0)
sheet := "Sheet1"
sheet := "city"
excel := excelize.NewFile()
excel.SetSheetName("Sheet1", sheet)
headerData := []interface{}{"seq", "name", "state", "zipCode", "cityCode", "crc"}
colNumb := AddExcelRow(excel, sheet, 1, headerData)
......
package gen
import (
"database/sql"
"fmt"
"github.com/360EntSecGroup-Skylar/excelize/v2"
"github.com/easysoft/zendata/src/model"
constant "github.com/easysoft/zendata/src/utils/const"
logUtils "github.com/easysoft/zendata/src/utils/log"
"strconv"
"strings"
)
......@@ -15,13 +19,11 @@ func GenerateFieldValuesFromExcel(field *model.Field, fieldValue *model.FieldVal
stepStr := "1"
if len(sectionArr) == 2 { stepStr = sectionArr[1] }
// read from file
list := make([]string, 0)
relaPath := constant.DataDir + file
path := constant.DataDir + file
ConvertExcelToSQLite(*field, path)
list = strings.Split("str" + relaPath, "\n")
list = strings.Split("str" + path, "\n")
// get step and rand
rand := false
......@@ -54,8 +56,75 @@ func GenerateFieldValuesFromExcel(field *model.Field, fieldValue *model.FieldVal
}
}
func ConvertExcelToSQLite(file string) {
func ConvertExcelToSQLite(field model.Field, path string) {
excel, err := excelize.OpenFile(path)
if err != nil {
logUtils.Screen("fail to read file: " + err.Error())
return
}
sheet := excel.GetSheetName(0);
rows, err := excel.GetRows(sheet)
dropTemplate := `DROP TABLE IF EXISTS %s;`
ddlTemplate := `CREATE TABLE %s (
%s
);`
insertTemplate := "INSERT INTO %s (%s) VALUES %s"
colDefine := ""
colList := ""
index := 0
for _, col := range rows[0] {
val := strings.TrimSpace(col)
if index > 0 {
colDefine = colDefine + ",\n"
colList = colList + ", "
}
colProp := ""
if val == "seq" {
colProp = "CHAR (5) PRIMARY KEY ASC UNIQUE"
} else {
colProp = "VARCHAR"
}
colDefine = " " + colDefine + val + " " + colProp
colList = colList + val
index++
}
valList := ""
for rowIndex, row := range rows {
if rowIndex == 0 { continue }
if rowIndex > 1 { valList = valList + ", " }
valList = valList + "("
for colIndex, colCell := range row {
if colIndex > 0 { valList = valList + ", " }
valList = valList + "'" + colCell + "'"
}
valList = valList + ")"
}
dropSql := fmt.Sprintf(dropTemplate, field.Name)
ddl := fmt.Sprintf(ddlTemplate, field.Name, colDefine)
insertSql := fmt.Sprintf(insertTemplate, field.Name, colList, valList)
db, err := sql.Open("sqlite3", constant.SqliteSource)
_, err = db.Exec(dropSql)
_, err = db.Exec(ddl)
if err != nil {
logUtils.Screen("fail to create table: " + err.Error())
return
} else {
_, err = db.Exec(insertSql)
if err != nil {
logUtils.Screen("fail to insert data: " + err.Error())
return
}
}
}
func ReadDataSQLite(table string) []string {
......
......@@ -53,15 +53,7 @@ func GenerateForField(field *model.Field, total int) []string {
values := make([]string, 0)
if field.Type == "custom" {
if field.Range != "" { // specific custom file
LoadDefinitionFromFile(constant.ResDir + field.Range)
}
referField := constant.LoadedFields[field.Name]
values = GenerateFieldItemsFromDefinition(&referField, total)
} else if len(field.Fields) > 0 { // nested definition
if len(field.Fields) > 0 { // nested definition
arr := make([][]string, 0)
for _, child := range field.Fields {
childValues := GenerateForField(&child, total)
......@@ -77,8 +69,22 @@ func GenerateForField(field *model.Field, total int) []string {
concat = field.Prefix + concat + field.Postfix
values = append(values, concat)
}
} else {
} else if field.Type == "list" { // list type
values = GenerateFieldItemsFromDefinition(field, total)
} else if field.Type == "custom" { // custom type
if field.Range != "" { // specific custom file
LoadDefinitionFromFile(constant.ResDir + field.Range)
}
referField := constant.LoadedFields[field.Name]
values = GenerateFieldItemsFromDefinition(&referField, total)
} else {// other type like address.city
arr := strings.Split(field.Type, ".")
referField := constant.LoadedFields[arr[0]]
values = GenerateFieldItemsFromDefinition(&referField, total)
}
return values
......@@ -95,12 +101,12 @@ func GenerateFieldItemsFromDefinition(field *model.Field, total int) []string {
fieldValue := model.FieldValue{}
switch datatype {
case constant.LIST.String():
//switch datatype {
//case constant.LIST.String():
fieldValue = GenerateList(field, total)
default:
}
//
//default:
//}
index := 0
count := 0
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册