forked from go/golangs_learn
viviman
3 years ago
6 changed files with 141 additions and 1 deletions
@ -0,0 +1,21 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
||||
|
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> |
||||
|
<assemblyIdentity |
||||
|
version="1.0.0.0" |
||||
|
processorArchitecture="x86" |
||||
|
name="controls" |
||||
|
type="win32" |
||||
|
></assemblyIdentity> |
||||
|
<dependency> |
||||
|
<dependentAssembly> |
||||
|
<assemblyIdentity |
||||
|
type="win32" |
||||
|
name="Microsoft.Windows.Common-Controls" |
||||
|
version="6.0.0.0" |
||||
|
processorArchitecture="*" |
||||
|
publicKeyToken="6595b64144ccf1df" |
||||
|
language="*" |
||||
|
></assemblyIdentity> |
||||
|
</dependentAssembly> |
||||
|
</dependency> |
||||
|
</assembly> |
@ -0,0 +1,118 @@ |
|||||
|
package main |
||||
|
|
||||
|
/* |
||||
|
思路: |
||||
|
首先:配置文件,若不存在生成配置文件,生成配置文件 |
||||
|
其次:通过配置获取数据库链接 ,并链接和查询语句 |
||||
|
最后:将查询语句生成excel |
||||
|
|
||||
|
*/ |
||||
|
import ( |
||||
|
"database/sql" |
||||
|
"fmt" |
||||
|
"strconv" |
||||
|
"strings" |
||||
|
"time" |
||||
|
|
||||
|
"github.com/360EntSecGroup-Skylar/excelize" |
||||
|
_ "github.com/go-sql-driver/mysql" |
||||
|
) |
||||
|
|
||||
|
//存在所有对象信息 - 集合
|
||||
|
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" |
||||
|
} |
||||
|
} |
Binary file not shown.
After Width: | Height: | Size: 264 KiB |
Loading…
Reference in new issue