【问题标题】:Multi-select list box in an excel spreadsheet using data validation使用数据验证的 Excel 电子表格中的多选列表框
【发布时间】:2018-05-08 09:04:57
【问题描述】:

我想在excel电子表格中使用数据验证实现多选列表框。

我找到了一个链接here,它谈到了MS-excel中的开发人员选项卡,我可以在其中拖放一个列表框控件来实现列表框效果。可能是 Visual Studio tools for Office (VSTO) 路线。我不想走这条路。

相反,我试图通过数据验证和ClosedXML nuget 包来实现它。

我已经有了下面的代码,借助它我可以创建一个下拉列表,但不确定如何将其转换为多选列表框:

//imported namespaces
using ClosedXML.Excel;
using System;
using System.Data;

//code in main method
var workbook = new XLWorkbook();

DataTable userData = new DataTable("Sheet1");
userData.Columns.Add("Master Column");


workbook.AddWorksheet(userData);
var worksheet = workbook.Worksheet(1);


 DataTable validationTable = new DataTable();
 validationTable.Columns.Add("DropDownItems");
 validationTable.TableName = "Sheet2";

 DataRow dr = validationTable.NewRow();
 dr["DropDownItems"] = "Item1";
 validationTable.Rows.Add(dr);

 dr = validationTable.NewRow();
 dr["DropDownItems"] = "Item2";
 validationTable.Rows.Add(dr);

 dr = validationTable.NewRow();
 dr["DropDownItems"] = "Item3";
 validationTable.Rows.Add(dr);


 workbook.AddWorksheet(validationTable);
 var worksheet2 = workbook.Worksheet(2);
 worksheet.Column(1).SetDataValidation().List(worksheet2.Range("A2:A4"), true);

  //keep the data validation worksheet hidden
  worksheet2.Hide();

  workbook.SaveAs(@"C:\myworkbook.xlsx");

目前这个源代码会产生一个这样的组合框:

我必须在 C# 中使用 ClosedXML 以编程方式实现多选行为。

【问题讨论】:

  • 使用 ClosedXML,您可以从磁盘加载现有文件并检查它们。我建议手动创建一个包含此控件的 Excel 文档,然后将其加载到 ClosedXML 中并调试特定单元格/范围的内容。看看你得到了什么很有趣。
  • @RBT 您找到任何解决方案了吗,请告诉我。我也在同一页面上,我正在尝试使用 OpenXML nuget 包来实现此功能。

标签: c# excel listbox multi-select closedxml


【解决方案1】:

开发人员选项卡不需要 Visual Studio;它只是隐藏起来。

  • 前往FileOptions → 左侧:Customize Ribbon
  • 点击右侧Main Tabs列表下的Developer复选框。
  • 点击OK

一个新的“菜单”将出现在名为 Developer 的功能区上,其类别包括代码、加载项、控件、XML、修改(取决于您的版本)。

在 Excel 中,您不能像在 Access 等中那样轻松地将控件从一种类型“转换”为另一种类型,但是在“开发人员”菜单可见的情况下,您现在可以创建一个列表框,并从您的组合框中复制 VBA。

如果您为列表框赋予与组合框相同的名称(在您删除组合框之后),那么转换将更加容易。 (如果不是总是有 Ctrl+H 搜索和替换!)

【讨论】:

  • 我正在尝试通过数据验证和 ClosedXML nuget 包来实现它。
【解决方案2】:

ClosedXML 不支持表单控件。

【讨论】:

  • 是的。我想通过数据验证路线来实现它。是否可以通过数据验证来实现。通过数据验证,我可以创建一个单选下拉框。我可以调整我显示的代码以使其成为多选吗?
猜你喜欢
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
相关资源
最近更新 更多