如何使用 c# ClosedXML 使用方法 List(String list, Boolean inCellDropdown) 在 Excel 中设置下拉列表验证

Gau*_*rek 1 .net c# excel closedxml

大家好,我正在尝试使用 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);
      }
Run Code Online (Sandbox Code Playgroud)

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

有问题的方法是public void List(String list, Boolean inCellDropdown)。根据数据验证 wiki 页面,可以使用字符串列表:

//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);
Run Code Online (Sandbox Code Playgroud)

Pan*_*vos 5

根据数据验证wiki 页面,列表列表必须包含双引号。

在文档示例中:

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

validOptions包含:

"Option1,Option2,Option3"`
Run Code Online (Sandbox Code Playgroud)

您自己的代码应更改为:

.List("\"one,two,three\"", true);
Run Code Online (Sandbox Code Playgroud)