将列表验证添加到除前两行之外的列
Add List Validation to Column except the first two rows
我正在尝试在创建 excel 时添加下拉列表(列表验证),我已经找到了将其添加到整列的方法,但我的情况不同,因为我只将验证添加到整列除了第一行和第二行。
这是我目前尝试过的方法:
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;
希望它会删除对某个单元格的验证,但它不起作用。
我也试过了
var val = worksheet.DataValidations.AddListValidation("A2:A");
指定起始行号但生成的Excel文件已损坏。
请问有什么帮助吗?
AFAIK 不幸的是,无法在 "Row 2 to Infinity" 的 excel 中设置范围。所以像 "A2:A" 这样的东西是行不通的。
要进行演示,请尝试使用验证列表在 Excel 中手动创建工作表并保存(与代码无关)。在所有 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 有一个适当的扩展方法来从以下范围获取地址字符串:
public static string GetAddress(int FromRow, int FromColumn, int ToRow, int ToColumn)
ExcelPackage 有一个 public const MaxRows
(1048576),您可以将其用于 ToRow
参数。
针对您的情况将这些放在一起:
var range = ExcelRange.GetAddress(2, 1, ExcelPackage.MaxRows, 1);
var val = worksheet.DataValidations.AddListValidation(range);
我正在尝试在创建 excel 时添加下拉列表(列表验证),我已经找到了将其添加到整列的方法,但我的情况不同,因为我只将验证添加到整列除了第一行和第二行。
这是我目前尝试过的方法:
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;
希望它会删除对某个单元格的验证,但它不起作用。
我也试过了
var val = worksheet.DataValidations.AddListValidation("A2:A");
指定起始行号但生成的Excel文件已损坏。
请问有什么帮助吗?
AFAIK 不幸的是,无法在 "Row 2 to Infinity" 的 excel 中设置范围。所以像 "A2:A" 这样的东西是行不通的。
要进行演示,请尝试使用验证列表在 Excel 中手动创建工作表并保存(与代码无关)。在所有 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 有一个适当的扩展方法来从以下范围获取地址字符串:
public static string GetAddress(int FromRow, int FromColumn, int ToRow, int ToColumn)
ExcelPackage 有一个 public const MaxRows
(1048576),您可以将其用于 ToRow
参数。
针对您的情况将这些放在一起:
var range = ExcelRange.GetAddress(2, 1, ExcelPackage.MaxRows, 1);
var val = worksheet.DataValidations.AddListValidation(range);