forked from go/golangs_learn
1 changed files with 2 additions and 108 deletions
@ -1,118 +1,12 @@ |
|||||
package main |
package main |
||||
|
|
||||
/* |
/* |
||||
思路: |
思路: 脚本按照顺序拼接,旧文件按照 utf8 格式清空 |
||||
首先:配置文件,若不存在生成配置文件,生成配置文件 |
|
||||
其次:通过配置获取数据库链接 ,并链接和查询语句 |
|
||||
最后:将查询语句生成excel |
|
||||
|
|
||||
*/ |
*/ |
||||
import ( |
import () |
||||
"database/sql" |
|
||||
"fmt" |
|
||||
"strconv" |
|
||||
"strings" |
|
||||
"time" |
|
||||
|
|
||||
"github.com/360EntSecGroup-Skylar/excelize" |
|
||||
_ "github.com/go-sql-driver/mysql" |
|
||||
) |
|
||||
|
|
||||
//存在所有对象信息 - 集合
|
//存在所有对象信息 - 集合
|
||||
func main() { |
func main() { |
||||
db, _ := sql.Open("mysql", "root:admin@tcp(127.0.0.1:35017)/hy_qggwy?charset=utf8") |
|
||||
|
|
||||
// QuerySQL(db, "select A0824 学位名称,count(1) 数量 from a08 where A0824 is not null and A0824 <> '' group by A0824")
|
|
||||
|
|
||||
QuerySQL(db, "select (select code_name from code_value where CODE_VALUE=A0827 and CODE_TYPE='GB16835') 学位名称,count(1) 数量 from a08 where A0827 is not null and A0827 <> '' group by A0827") |
|
||||
} |
|
||||
|
|
||||
// 获取表数据
|
|
||||
func QuerySQL(db *sql.DB, sqlStr string) { |
|
||||
xlsx := excelize.NewFile() |
|
||||
rows, _ := db.Query(sqlStr) |
|
||||
defer rows.Close() |
|
||||
cloumns, _ := rows.Columns() |
|
||||
values := make([]sql.RawBytes, len(cloumns)) |
|
||||
scanArgs := make([]interface{}, len(values)) |
|
||||
for i := range values { |
|
||||
scanArgs[i] = &values[i] |
|
||||
} |
|
||||
isFrist := true |
|
||||
rowAfter := 1 |
|
||||
colBefor := "" |
|
||||
colAfter := "" |
|
||||
for rows.Next() { |
|
||||
colBefor = "" |
|
||||
_ = rows.Scan(scanArgs...) |
|
||||
var value string |
|
||||
for i, col := range values { |
|
||||
if col == nil { |
|
||||
value = "NULL" |
|
||||
} else { |
|
||||
value = string(col) |
|
||||
} |
|
||||
colBefor = strings.Replace(ASCIINext(colBefor), " ", "", -1) |
|
||||
colAfter = colBefor + strconv.Itoa(rowAfter) |
|
||||
if isFrist { |
|
||||
colAfter = colBefor + "1" |
|
||||
xlsx.SetCellValue("Sheet1", colAfter, cloumns[i]) |
|
||||
colAfter = colBefor + "2" |
|
||||
xlsx.SetCellValue("Sheet1", colAfter, value) |
|
||||
rowAfter = 2 |
|
||||
} else { |
|
||||
xlsx.SetCellValue("Sheet1", colAfter, value) |
|
||||
} |
|
||||
//fmt.Print(cloumns[i], ": ", value) //输出字段名 - 值
|
|
||||
} |
|
||||
isFrist = false |
|
||||
rowAfter += 1 |
|
||||
} |
|
||||
var path string |
|
||||
path = "./查询结果-" + time.Now().Format("2006102150405") + ".xlsx" |
|
||||
errExcel := xlsx.SaveAs(path) |
|
||||
if errExcel != nil { |
|
||||
fmt.Println(errExcel) |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// 获取行向单元格的下格子
|
|
||||
func ASCIINext(strFrist string) string { |
|
||||
if strFrist == "" { |
|
||||
return "A" |
|
||||
} |
|
||||
switch len(strFrist) { |
|
||||
case 1: |
|
||||
if strFrist == "Z" { |
|
||||
return "AA" |
|
||||
} else { |
|
||||
return string(strFrist[0] + 1) |
|
||||
} |
|
||||
case 2: |
|
||||
if strFrist == "ZZ" { |
|
||||
return "AAA" |
|
||||
} else { |
|
||||
if strFrist[1:] == "Z" { |
|
||||
return string(strFrist[0]+1) + "A" |
|
||||
} else { |
|
||||
return strFrist[:1] + string(strFrist[1]+1) |
|
||||
} |
|
||||
} |
|
||||
case 3: |
|
||||
if strFrist == "ZZZ" { |
|
||||
return "AAAA" |
|
||||
} else { |
|
||||
if strFrist[2:] == "Z" { |
|
||||
if strFrist[1:2] == "Z" { |
|
||||
return string(strFrist[0]+1) + "AA" |
|
||||
} else { |
|
||||
return strFrist[:1] + string(strFrist[1]+1) + "A" |
|
||||
} |
|
||||
} else { |
|
||||
return strFrist[:2] + string(strFrist[2]+1) |
|
||||
} |
|
||||
} |
|
||||
default: |
|
||||
return "A" |
|
||||
} |
|
||||
} |
} |
||||
|
Loading…
Reference in new issue