【问题标题】:How to set validation for drop down in Excel using c# ClosedXML using method List(String list, Boolean inCellDropdown)如何使用 c# ClosedXML 使用方法 List(String list, Boolean inCellDropdown) 在 Excel 中设置下拉验证
【发布时间】:2020-02-19 14:14:41
【问题描述】:

大家好,我正在尝试使用 ClosedXML 库为我的 excel 中的列创建一个下拉列表。我可以使用以下代码成功创建它。

      using (XLWorkbook wb = new XLWorkbook())
      {
        wb.Worksheets.Add(dt);
        wb.Worksheets.Add(dt2);
        var worksheet2 = wb.Worksheet(2);
        //wb.Worksheet(1).Column(11).SetDataValidation().List("one,two,three", true); This does not work fine
        wb.Worksheet(1).Column(11).SetDataValidation().List(worksheet2.Range("A2:A12"), true);// Works fine
        wb.Worksheet(1).Column(11).SetDataValidation().IgnoreBlanks = true;
        wb.Worksheet(1).Column(11).SetDataValidation().InCellDropdown = true;
        wb.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
        wb.Style.Font.Bold = true;
        wb.SaveAs(targetFile);
      }

但我想在 SetDataValidation() 中使用 List 的另一个重载方法做同样的事情,但这是在创建 excel,但是当我试图打开它时,它说它已损坏。您能否帮我理解为什么其他重载方法不起作用。

有问题的方法是public void List(String list, Boolean inCellDropdown)。根据Data Validation wiki page,使用字符串列表是可能的:

//Pass a string in this format: "Option1,Option2,Option3"
var options = new List<string>{"Option1","Option2","Option3"};
var validOptions = $"\"{String.Join(",", options)}\"";
ws.Cell(1,1).DataValidation.List(validOptions, true);

【问题讨论】:

  • 还有什么重载方法?您不能询问您尚未发布的代码的问题。当前代码也可以清理很多 - 没有理由重复进行相同的调用。只需将工作表、列以及SetDataValidation() 的结果存储在变量中并重用它们。这避免了 CPU 浪费,也使调试和故障排除变得更加容易
  • 我在评论中提到了另一个重载方法。可以参考第六行代码。
  • 这是注释掉的行。这并不意味着该方法存在,或者如果存在,它会按照您的想法工作。这不显示方法的签名。你检查过 CloseXML 的文档吗?还有其他方法吗?它的参数是什么?有链接吗?
  • 这里是源代码链接,您可以在其中看到注释方法存在。我评论它只是为了显示哪些代码有效,哪些无效。对困惑感到抱歉。 github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/…
  • 把它放在问题本身中,并明确你想调用什么。我已经通过谷歌搜索找到了该方法。我不应该那样做。其他任何阅读该问题的人也不应该这样做。很简单,当人们发现你在说什么时,他们可能已经没有时间回答了。我再也不能

标签: c# .net excel closedxml


【解决方案1】:

根据Data Validation wiki 页面,列表列表必须包含双引号。

在文档示例中:

var options = new List<string>{"Option1","Option2","Option3"};
var validOptions = $"\"{String.Join(",", options)}\"";
ws.Cell(1,1).DataValidation.List(validOptions, true);

validOptions 包含:

"Option1,Option2,Option3"`

您自己的代码应更改为:

.List("\"one,two,three\"", true);

【讨论】:

  • 谢谢它的工作还了解了我直到现在才知道的 git repo 上的 wiki 页面。
【解决方案2】:

因为官方文档的例子很少,所以我贴一些细节 这里的例子展示了如何将下拉列表添加到 excel 中。

        //set data validation, dropdown list
        // if we want list abcd in a cell, we should add ""
        var validateList = "\"A,B,C,D\"";

        //1.use column index
        worksheet.Column(3).SetDataValidation().List(validateList, true);

         //2.use column name
        worksheet.Column("D").SetDataValidation().List(validateList, true);

        //3.use column range
        worksheet.Range("E1:E20").SetDataValidation().List(validateList, true);

closedxml/wiki/Data-Validation

【讨论】:

  • 虽然这可能会回答问题,但请考虑添加一些解释。
  • 考虑添加一些评论,说明您的代码示例与问题中包含的代码相比如何工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2012-02-08
  • 2020-10-20
  • 1970-01-01
  • 2013-04-18
相关资源
最近更新 更多