该版本完全兼容最新版 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 < dropdown.StartRow {// 默认设置1000行下拉框dropdown.EndRow = dropdown.StartRow + 999}// 构建范围字符串 (如 "B2:B1000")dvRange := fmt.Sprintf("%s%d:%s%d",dropdown.Column,dropdown.StartRow,dropdown.Column,dropdown.EndRow,)// 创建数据验证对象dv := excelize.NewDataValidation(true) // 允许空值dv.SetSqref(dvRange)                   // 设置应用范围// 设置下拉列表选项if err := dv.SetDropList(dropdown.Options); err != nil {return fmt.Errorf("设置下拉选项失败: %w", err)}// 添加数据验证到工作表if err := f.AddDataValidation(sheet, dv); err != nil {return fmt.Errorf("添加下拉框失败: %w", err)}// 添加注释提示(使用新版API)commentCell := fmt.Sprintf("%s1", dropdown.Column)if err := f.AddComment(sheet, excelize.Comment{Cell:   commentCell,Author: "系统提示",Paragraph: []excelize.RichTextRun{{Text: "请从下拉列表中选择:\n"},{Text: joinOptions(dropdown.Options)},},}); err != nil {log.Printf("添加注释失败: %v", err)}}// 保存文件if err := f.SaveAs("template.xlsx"); err != nil {return fmt.Errorf("保存文件失败: %w", err)}return nil
}// 将选项列表转换为逗号分隔的字符串(用于注释)
func joinOptions(options []string) string {result := ""for i, opt := range options {if i > 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. 纯表头模板

    • 只生成表头行(第1行)

    • 没有数据行

  2. 下拉框功能

    • 在指定列添加数据验证下拉框

    • 下拉框从第2行开始到指定结束行

    • 支持多个下拉框列

  3. 增强功能

    • 表头美化:加粗、居中、蓝底白字

    • 列宽自适应:根据标题长度自动调整列宽

    • 提示注释:在列标题添加下拉选项提示

    • 空值允许:允许单元格为空

使用说明:

  1. 安装依赖

    bash

    go get github.com/xuri/excelize/v2

  2. 运行程序

    bash

    go run main.go

  3. 输出文件

    • 生成 template.xlsx 文件

    • 打开后可以看到表头和下拉框设置

自定义选项:

  1. 修改下拉选项

    go

    Options: []string{"选项1", "选项2", "选项3"},

  2. 调整下拉范围

    go

    StartRow: 2,   // 从第2行开始
    EndRow:   500, // 到第500行

  3. 添加更多下拉列

    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)}}

修改这两处,即可按照用户设置的列宽来确定模板的列宽了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90338.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90338.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90338.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全连接队列

监听套接字使用socket接口创建一个套接字&#xff0c;然后bind给套接字绑定地址&#xff0c;最后listen将套接字设置为监听套接字。监听套接字以前理解是三元组标识&#xff0c;后面看了netstat&#xff0c;觉得应该是五元组&#xff0c;只不过它这个五元组是{协议&#xff0c;…

JavaWeb-JSP

JSP JSP就是模板引擎 Template&#xff0c;因为看到的jsp是模板不变的&#xff0c;如果想让页面发生改变&#xff0c;就是自己添加java代码改变页面。有Java代码&#xff0c;Tomcat服务器就会对jsp模板进行解析&#xff0c;解析完之后就是Servlet&#xff08;java类&#xff09…

大模型中常说的Token到底是什么?和Cookie和Session有什么区别?一文讲清

什么是Token&#xff08;令牌&#xff09;Acesss Token是访问资源接口&#xff08;API&#xff09;时所需要的资源凭证。简单token的组成&#xff1a;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign&#xff08;签名&#xff0c;token的前几位以哈希算法压缩成的一定长…

RAGFlow:检索增强生成技术的高效实现与深度探索

在当今信息爆炸的时代&#xff0c;如何从海量的数据中快速、准确地获取并利用有价值的信息&#xff0c;成为了众多领域面临的关键挑战。检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技术应运而生&#xff0c;它将信息检索与大型语言模型&#xff…

【轨物洞见】光伏逆变器数据:分布式电站价值回归的“第一块多米诺骨牌”

1. 逆变器&#xff1a;光伏电站的核心“数据心脏” 逆变器是将光伏组件产生的直流电转换为交流电的关键设备&#xff0c;其性能直接影响着整个电站的效率与稳定性。对其电压、电流、功率参数以及故障告警信息进行远程数据采集&#xff0c;是实现精细化运维和预测性维护的起点。…

如何在 npm 上发布 Element Plus 二次封装组件

在一次开发中&#xff0c;小李接到一个重要的任务&#xff1a;将 Element Plus 中的时间组件根据团队的独特需求进行二次封装。他灵机一动&#xff0c;决定将这个自定义组件打包成一个 npm 包&#xff0c;以便团队的其他小伙伴们可以快速、方便地使用。接下来&#xff0c;让我们…

vue2使用v-viewer图片预览:打开页面自动预览,禁止关闭预览,解决在微信浏览器的页面点击事件老是触发预览初始化的问题

1、安装&#xff1a; npm install v-viewer viewerjs2、在 main.js 中全局注册&#xff1a; import Viewer from v-viewer; import viewerjs/dist/viewer.css; Vue.use(Viewer ); //配置项&#xff08;可选&#xff0c;根据需求调整&#xff09; // Vue.use(Viewer, { // d…

开源 Arkts 鸿蒙应用 开发(八)多媒体--相册和相机

文章的目的为了记录使用Arkts 进行Harmony app 开发学习的经历。本职为嵌入式软件开发&#xff0c;公司安排开发app&#xff0c;临时学习&#xff0c;完成app的开发。开发流程和要点有些记忆模糊&#xff0c;赶紧记录&#xff0c;防止忘记。 相关链接&#xff1a; 开源 Arkts …

无线通信资源分配相关算法

1.Maximum Clique First (MCF)是一种启发式图着色算法&#xff08;heuristic graph coloring algorithm&#xff09;&#xff0c;它的核心思想是&#xff1a;优先为图中最大团&#xff08;maximum clique&#xff09;中的顶点分配不同的颜色&#xff0c;然后再依次为其他顶点上…

Kafka监控体系搭建:基于Prometheus+JMX+Grafana的全方位性能观测方案

为什么需要Kafka监控监控架构概述步骤一&#xff1a;部署JMX Exporter 1.1 下载JMX Agent1.2 创建指标暴露配置 步骤二&#xff1a;配置Kafka集成JMX 2.1 启动参数配置2.2 验证指标暴露 步骤三&#xff1a;配置Prometheus采集 3.1 修改Prometheus配置3.2 验证数据采集 步骤四&a…

stack 和 queue

目录 一、stack 1.1 stack 的介绍 1.2 stack的使用 1&#xff09;最小栈 2&#xff09;栈的弹出压入序列 3&#xff09;逆波兰表达式求值 1.3 stack 的模拟使用 二、queue 2.1 queue的介绍 2.2 queue的使用 2.3 queue的模拟使用 三、容器适配器 3.1 什么是容器适配…

sqlsuger 子表获取主表中的一个字段的写法

在使用 SQL 语言进行数据库操作时&#xff0c;如果你想要从子表获取数据&#xff0c;同时关联到主表中的一个字段&#xff0c;通常我们会使用 SQL 的 JOIN 语句。JOIN 语句允许你通过一个或多个共同的字段将两个或多个表连接起来。这里我将展示几种常见的 JOIN 类型&#xff08…

Docker配置Gitlab-runner实现自动化容器化部署前端项目

叠甲前言 本文仅作为个人学习GitLab的CI/CD功能记录&#xff0c;不适合作为专业性指导&#xff0c;如有纰漏&#xff0c;烦请君指正。 云主机注册Gitlab Runner 自动化构建部署的弊端 在前一文中&#xff0c;我们在Linux云主机上注册了Gitlab-runner, 每次在gitlab流水线上发…

MySQL介绍和MySQL包安装

文章目录MySQL介绍和安装1.MySQL介绍1.1 MySQL 的定义1.2 MySQL 的特点1.3 MySQL 的应用领域1.4 MySQL 的存储引擎1.5 MySQL 的架构1.6 MySQL 的优势和局限性1.7 MySQL 的未来发展趋势2.MySQL安装2.1 主机初始化2.1.1 设置网卡名2.1.2 设置ip地址2.1.3 配置镜像源2.1.4 关闭防火…

J2EE模式---视图助手模式

视图助手模式基础概念视图助手模式&#xff08;View Helper Pattern&#xff09;是一种结构型设计模式&#xff0c;其核心思想是将视图层中复杂的逻辑提取到独立的助手类中&#xff0c;使视图代码更加简洁、易于维护。视图助手通常提供一系列工具方法&#xff0c;用于处理格式化…

开源的语音合成大模型-Cosyvoice使用介绍

1 模型概览 CosyVoice 是由阿里巴巴达摩院通义实验室开发的新一代生成式语音合成大模型系列&#xff0c;其核心目标是通过大模型技术深度融合文本理解与语音生成&#xff0c;实现高度拟人化的语音合成体验。该系列包含初代 CosyVoice 及其升级版 CosyVoice 2.0&#xff0c;两者…

深度学习·CLIP

CLIP 数据大小 4亿个文本-图像对&#xff0c;而且是高质量的 预训练方法 Text encoder“The text sequence is bracketed with [SOS] and [EOS] tokens and the activations of the highest layer of the transformer at the [EOS] token are used as the feature representati…

美光MTFC8GAKAJCN-4M_IT型eMMC应用介绍

1.1 芯片订购信息美光MTFC8GAKAJCN-4M_IT型eMMC&#xff0c;容量8GB&#xff0c;153-ball VFBGA封装。1.2 eMMC料号含义2.1 特性•多媒体卡&#xff08;MMC&#xff09;控制器和NAND闪存•153球FBGA封装&#xff08;符合RoHS标准&#xff0c;环保封装&#xff09;•VCC&#xf…

面向对象分析与设计40讲(6)设计原则之开闭原则

文章目录 一、概念 二、示例(C++ 实现) 1. 违反开闭原则的示例 2. 遵循开闭原则的示例 一、概念 开闭原则(Open-Closed Principle,OCP)是面向对象设计中的重要原则,由 Bertrand Meyer 提出,核心思想可以概括为:对扩展开放,对修改关闭。 具体来说,一个软件实体(如类…

[Linux入门] Linux 网络设置入门:从查看、测试到配置全攻略

目录 一、查看网络信息&#xff1a;了解你的网络状态 1️⃣核心工具&#xff1a;ip命令&#xff08;替代ifconfig&#xff09; <1> 基本语法&#xff1a; <2> 实用操作示例&#xff1a; 2️⃣查看路由表&#xff1a;route命令 3️⃣查看网络连接状态&#xf…