forked from go/golangs_learn
				
			
				 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