forked from go/golangs_learn
viviman
3 years ago
1 changed files with 2 additions and 108 deletions
@ -1,118 +1,12 @@ |
|||
package main |
|||
|
|||
/* |
|||
思路: |
|||
首先:配置文件,若不存在生成配置文件,生成配置文件 |
|||
其次:通过配置获取数据库链接 ,并链接和查询语句 |
|||
最后:将查询语句生成excel |
|||
思路: 脚本按照顺序拼接,旧文件按照 utf8 格式清空 |
|||
|
|||
*/ |
|||
import ( |
|||
"database/sql" |
|||
"fmt" |
|||
"strconv" |
|||
"strings" |
|||
"time" |
|||
|
|||
"github.com/360EntSecGroup-Skylar/excelize" |
|||
_ "github.com/go-sql-driver/mysql" |
|||
) |
|||
import () |
|||
|
|||
//存在所有对象信息 - 集合
|
|||
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