Golang实现 - 实现只有表头的 Excel 模板,并在指定列添加了下拉框功能。生成的 Excel 文件在打开时,指定列的单元格会显示下拉选项
该版本完全兼容最新版 excelize 库 (v2.7+),实现了只有表头的 Excel 模板,并在指定列添加了下拉框功能。生成的 Excel 文件在打开时,指定列的单元格会显示下拉选择箭头。
代码如下:
package mainimport (\"fmt\"\"log\"\"github.com/xuri/excelize/v2\")// Excel模板配置type ExcelTemplateConfig struct {SheetName string // 工作表名称Headers []HeaderConfig // 表头配置DropdownCols []DropdownCol // 下拉框列配置}type HeaderConfig struct {Title string // 列标题Column string // 列标识(如A, B, C)}type DropdownCol struct {Column string // 需要下拉框的列标识(如B, C)Options []string // 下拉选项列表StartRow int // 下拉框起始行(从1开始)EndRow int // 下拉框结束行}func CreateExcelTemplate(config ExcelTemplateConfig) error {f := excelize.NewFile()defer f.Close()// 设置工作表名称sheet := config.SheetNameif sheet == \"\" {sheet = \"Sheet1\"}// 创建新工作表index, err := f.NewSheet(sheet)if err != nil {return fmt.Errorf(\"创建工作表失败: %w\", err)}f.SetActiveSheet(index)// 写入表头for _, header := range config.Headers {cell := fmt.Sprintf(\"%s1\", header.Column)if err := f.SetCellValue(sheet, cell, header.Title); err != nil {return fmt.Errorf(\"写入表头失败: %w\", err)}// 设置表头样式(可选)style, _ := f.NewStyle(&excelize.Style{Font: &excelize.Font{Bold: true, Color: \"FFFFFF\"},Fill: excelize.Fill{Type: \"pattern\", Color: []string{\"4F81BD\"}, Pattern: 1},Alignment: &excelize.Alignment{Horizontal: \"center\"},})f.SetCellStyle(sheet, cell, cell, style)}// 设置列宽(可选)for _, header := range config.Headers {colWidth := 15.0 // 默认列宽if len(header.Title) > 15 {colWidth = float64(len(header.Title)) + 2}if err := f.SetColWidth(sheet, header.Column, header.Column, colWidth); err != nil {log.Printf(\"设置列宽失败: %v\", err)}}// 添加下拉框for _, dropdown := range config.DropdownCols {if dropdown.EndRow 0 {result += \", \"}result += opt}return result}func main() {// 配置Excel模板config := ExcelTemplateConfig{SheetName: \"Sheet1\",Headers: []HeaderConfig{{Title: \"产品ID\", Column: \"A\"},{Title: \"产品名称\", Column: \"B\"},{Title: \"产品状态\", Column: \"C\"},{Title: \"产品类别\", Column: \"D\"},},DropdownCols: []DropdownCol{{Column: \"C\", // 状态列Options: []string{\"在售\", \"下架\", \"预售\", \"停产\", \"测试\"},StartRow: 2, // 从第2行开始EndRow: 1000, // 到第1000行},{Column: \"D\", // 类别列Options: []string{\"电子产品\", \"家居用品\", \"服装\", \"食品\", \"图书\", \"ceshi\"},StartRow: 2,EndRow: 1000,},},}// 生成Excel模板文件if err := CreateExcelTemplate(config); err != nil {log.Fatalf(\"生成模板失败: %v\", err)}fmt.Println(\"Excel模板已成功生成: template.xlsx\")fmt.Println(\"包含以下下拉框列:\")for i, dropdown := range config.DropdownCols {fmt.Printf(\"%d. 列 %s: %v\\n\", i+1, dropdown.Column, dropdown.Options)}}
功能说明:
-
纯表头模板:
-
只生成表头行(第1行)
-
没有数据行
-
-
下拉框功能:
-
在指定列添加数据验证下拉框
-
下拉框从第2行开始到指定结束行
-
支持多个下拉框列
-
-
增强功能:
-
表头美化:加粗、居中、蓝底白字
-
列宽自适应:根据标题长度自动调整列宽
-
提示注释:在列标题添加下拉选项提示
-
空值允许:允许单元格为空
-
使用说明:
-
安装依赖:
bash
go get github.com/xuri/excelize/v2
-
运行程序:
bash
go run main.go
-
输出文件:
-
生成
template.xlsx
文件 -
打开后可以看到表头和下拉框设置
-
自定义选项:
-
修改下拉选项:
go
Options: []string{\"选项1\", \"选项2\", \"选项3\"},
-
调整下拉范围:
go
StartRow: 2, // 从第2行开始EndRow: 500, // 到第500行
-
添加更多下拉列:
go
DropdownCols: []DropdownCol{ {Column: \"E\", Options: []string{\"是\", \"否\"}, StartRow: 2, EndRow: 1000}, // 添加更多列...},
该版本完全兼容最新版 excelize 库 (v2.7+),实现了只有表头的 Excel 模板,并在指定列添加了下拉框功能。生成的 Excel 文件在打开时,指定列的单元格会显示下拉选择箭头。
扩展:
自定义列宽:
定义config:
// 配置Excel模板config := ExcelTemplateConfig{SheetName: \"Sheet1\",Headers: []HeaderConfig{{Title: \"产品ID\", Column: \"A\", Width: 20}, // 增加了列宽的配置{Title: \"产品名称\", Column: \"B\", Width: 40}, // 增加了列宽的配置{Title: \"产品状态\", Column: \"C\"},{Title: \"产品类别\", Column: \"D\"},},DropdownCols: []DropdownCol{{Column: \"C\", // 状态列Options: []string{\"在售\", \"下架\", \"预售\", \"停产\", \"测试\"},StartRow: 2, // 从第2行开始EndRow: 100000, // 到第100000行},{Column: \"D\", // 类别列Options: []string{\"电子产品\", \"家居用品\", \"服装\", \"食品\", \"图书\", \"ceshi\"},StartRow: 2,EndRow: 100000,},},}
设置列宽:
// 设置列宽(可选) for _, header := range config.Headers {colWidth := 15.0 // 默认列宽if header.Width > 15 {colWidth = float64(header.Width)}if err := f.SetColWidth(sheet, header.Column, header.Column, colWidth); err != nil {log.Printf(\"设置列宽失败: %v\", err)}}
修改这两处,即可按照用户设置的列宽来确定模板的列宽了。