将列表validation添加到除前两行之外的列

我想添加一个下拉列表(validation)创buildExcel时,我已经find了将其添加到整个列的方式,但我的scheme是不同的,因为我只将validation添加到除第一行和第二行以外的整个列。

这是我迄今为止所尝试的:

public MemoryStream GetExcelSheet() { using (var package = new ExcelPackage()) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Test"); var val = worksheet.DataValidations.AddListValidation("A:A"); val.Formula.Values.Add("Male"); val.Formula.Values.Add("Female"); val.ShowErrorMessage = true; worksheet.Cells["A1"].Formula = null; var stream = new MemoryStream(package.GetAsByteArray()); return stream; } } 

我试图取消它:

 worksheet.Cells["A1"].Formula = null; 

希望它会删除某个单元格的validation,但它不工作。

我也试过了

 var val = worksheet.DataValidations.AddListValidation("A2:A"); 

指定起始行号但生成的Excel文件已损坏。

对此有任何帮助吗?

不幸的是,AFAIK没有办法在“第2排到无穷”的excel中设置一个范围。 所以像“A2:A”这样的东西是行不通的。

要演示,请尝试使用validation列表手动创build工作表并保存它(与代码无关)。 在列A上设置val列表,然后单击A1并仅从列表中删除列表。 如果您将xlsx重命名为.zip,请将其打开,然后查看sheet1.xml文件,您将看到:

 <dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1" sqref="A2:A1048576"> <formula1>"Male,Female"</formula1> </dataValidation> 

注意sqref 。 基本上,excel设置范围从A2到最大行数在excel 2007格式1,048,576。 所以没有理由你不能这样做。

ExcelCellBase有一个合适的扩展方法来从一个范围获取地址string:

 public static string GetAddress(int FromRow, int FromColumn, int ToRow, int ToColumn) 

ExcelPackage有一个公共常量MaxRows (1048576),您可以将其用于ToRow参数。

把你的情况放在一起:

 var range = ExcelRange.GetAddress(2, 1, ExcelPackage.MaxRows, 1); var val = worksheet.DataValidations.AddListValidation(range);