【发布时间】: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/…
-
把它放在问题本身中,并明确你想调用什么。我已经通过谷歌搜索找到了该方法。我不应该那样做。其他任何阅读该问题的人也不应该这样做。很简单,当人们发现你在说什么时,他们可能已经没有时间回答了。我再也不能