|
|
@@ -0,0 +1,48 @@ |
|
|
|
package excel |
|
|
|
|
|
|
|
import ( |
|
|
|
"fmt" |
|
|
|
"reflect" |
|
|
|
|
|
|
|
"github.com/360EntSecGroup-Skylar/excelize" |
|
|
|
) |
|
|
|
|
|
|
|
// WriteXlsx 生成表格到本地服务器 |
|
|
|
func WriteXlsx(sheet string, records interface{}) *excelize.File { |
|
|
|
f := excelize.NewFile() // new file |
|
|
|
index := f.NewSheet(sheet) // new sheet |
|
|
|
f.SetActiveSheet(index) // set active (default) sheet |
|
|
|
firstCharacter := 65 // start from 'A' line |
|
|
|
t := reflect.TypeOf(records) |
|
|
|
|
|
|
|
if t.Kind() != reflect.Slice { |
|
|
|
return f |
|
|
|
} |
|
|
|
|
|
|
|
s := reflect.ValueOf(records) |
|
|
|
for i := 0; i < s.Len(); i++ { |
|
|
|
elem := s.Index(i).Interface() |
|
|
|
elemType := reflect.TypeOf(elem) |
|
|
|
elemValue := reflect.ValueOf(elem) |
|
|
|
for j := 0; j < elemType.NumField(); j++ { |
|
|
|
field := elemType.Field(j) |
|
|
|
// 结构体中xlsx 类似json |
|
|
|
tag := field.Tag.Get("xlsx") |
|
|
|
name := tag |
|
|
|
column := string(firstCharacter + j) |
|
|
|
if tag == "" { |
|
|
|
continue |
|
|
|
} |
|
|
|
// 设置表头 |
|
|
|
if i == 0 { |
|
|
|
f.SetCellValue(sheet, fmt.Sprintf("%s%d", column, i+1), name) |
|
|
|
} |
|
|
|
// 设置列宽 |
|
|
|
f.SetColWidth(sheet, "A", fmt.Sprintf("%s", column), 20) |
|
|
|
|
|
|
|
// 设置内容 |
|
|
|
f.SetCellValue(sheet, fmt.Sprintf("%s%d", column, i+2), elemValue.Field(j).Interface()) |
|
|
|
} |
|
|
|
} |
|
|
|
return f |
|
|
|
} |