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 < 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…