Python 创建 Excel 下拉列表的两种方法

[复制链接]
发表于 2026-9-16 15:44:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在 Excel 中设置下拉列表是规范数据录入的常用手段。手动操作虽然简单,但当需要为多个文件或大量单元格批量添加时,用 Python 自动化会更高效。Free Spire.XLS for Python 提供了两种直接的方式:一是通过 Values 属性直接指定选项列表,二是通过 DataRange 属性引用工作表中的单元格区域。
环境准备

安装免费库:
  1. pip install spire.xls.free
复制代码
代码中需要导入 spire.xls 和 spire.xls.common:
  1. from spire.xls import *
  2. from spire.xls.common import *
复制代码
焦点对象:DataValidation

在 Free Spire.XLS 中,下拉列表本质上是一种“列表类型”的数据验证。每个单元格区域(CellRange)都有一个 DataValidation 属性,通过配置这个对象即可实现下拉列表。最常用的两个设置项是:

  • DataValidation.DataRange:将某个单元格区域作为选项来源。
  • DataValidation.Values:直接用一个字符串列表作为选项。
设置完成后,目标区域中的每个单元格都会出现下拉箭头,用户只能从预设选项中选择(或根据错误提示设置决定是否允许手动输入)。
下面分别介绍这两种方式。
方法一:直接设置选项值

如果选项固定且数量不多,可以直接在代码中列出,无需在工作表中占用额外区域。这种方式生成的文件更简洁,选项配置完全由代码控制。
  1. from spire.xls import *
  2. from spire.xls.common import *workbook = Workbook()
  3. sheet = workbook.Worksheets[0]
  4. sheet.Name = "员工信息"
  5. # 写入表头
  6. sheet.Range["A1"].Text = "姓名"
  7. sheet.Range["C1"].Text = "职位"
  8. # 目标单元格区域:C2 到 C10
  9. cellRange = sheet.Range["C2:C10"]
  10. # 直接设置下拉列表的选项值(中文)
  11. cellRange.DataValidation.Values = ["实习生", "技术员", "主管", "总监"]
  12. workbook.SaveToFile("职位下拉列表.xlsx", FileFormat.Version2016)
  13. workbook.Dispose()
复制代码
Values 接受一个 Python 字符串列表,库会自动将其转换为 Excel 的列表验证。
方法二:引用单元格区域

这种方式适合选项较多、需要动态维护的场景。选项数据存放在工作表的某个区域,目标单元格引用该区域。修改选项时只需编辑数据区域,无需改动代码。
我们创建一个新的工作簿,在 F 列写入部门选项,然后在 B2:B10 区域创建下拉列表引用这些选项。
  1. from spire.xls import *
  2. from spire.xls.common import *# 创建工作簿并加载文件
  3. workbook = Workbook()
  4. workbook.LoadFromFile("Sample.xlsx")
  5. # 获取第一个工作表
  6. sheet = workbook.Worksheets.get_Item(0)
  7. # 选定需要设置下拉列表的单元格范围
  8. cellRange = sheet.Range["C3:C7"]
  9. # 将数据验证的数据范围设置为 F4:H4
  10. cellRange.DataValidation.DataRange = sheet.Range["F4:H4"]
  11. # 保存文件
  12. workbook.SaveToFile("output/DropDownListExcel.xlsx", FileFormat.Version2016)
  13. workbook.Dispose()
复制代码
DataRange 接受一个 CellRange 对象,指向包罗选项的单元格区域。被引用的区域可以是同一工作表,也可以是同一工作簿中的其他工作表(例如将选项集中放在一个“数据源”表中)。需要注意的是,引用的区域最好是一行或一列,避免多行多列造成选项读取顺序不符合预期。
跨工作表引用:

如果选项数据在另一个工作表中,只需把 sheet.Range["F1:H4"] 换成对应工作表的范围。例如:
  1. data_sheet = workbook.Worksheets[1]  # 第二个工作表
  2. data_sheet.Name = "数据源"
  3. data_sheet.Range["A1"].Text = "人事部"
  4. # ... 其他选项
  5. cellRange.DataValidation.DataRange = data_sheet.Range["A1:A10"]
复制代码
两种方法的对比与选择

对比项引用单元格区域直接指定选项值选项维护在 Excel 中编辑,非技术人员也能修改修改代码,重新生成工作表整洁度需要额外的数据区域不占用单元格选项数量限制基本无穷制(受 Excel 行数限制)总字符数不超过 255适用场景选项经常变动、数量较多选项固定、数量较少现实使用时可以根据需求灵活选择。如果是一次性生成或选项极少,方式一更直接;如果模板需要交给业务人员长期维护,推荐方式二。
进阶:错误提示与输入提示

数据验证不仅能限制输入,还能在用户操作时给出中文引导。设置完 DataRange 或 Values 后,可以继续配置以下属性:
  1. # 错误提示:用户输入了不在列表中的内容时触发
  2. cellRange.DataValidation.ShowError = True
  3. cellRange.DataValidation.ErrorTitle = "输入无效"
  4. cellRange.DataValidation.ErrorMessage = "请从下拉列表中选择,不要手动输入。"
  5. <p># 输入提示:单元格被选中时显示
  6. cellRange.DataValidation.ShowInput = True
  7. cellRange.DataValidation.InputTitle = "请选择"
  8. cellRange.DataValidation.InputMessage = "从下拉列表中选择一个选项。"
  9. </p>
复制代码

  • ShowError 为 True 时,无效输入会弹出错误对话框。AlertStyle 可以设置为 Stop(阻止输入)、Warning 或 Information(仅提示但允许继续)。
  • ShowInput 为 True 时,用户点击单元格会看到输入提示,可以在输入前就给出引导。

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表