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



我正在尝试在创建 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 文件已损坏。

请对此提供任何帮助吗?

ExcelCellBase 有一个适当的扩展方法来从范围中获取地址字符串:

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

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

为您的

案例整理一下:

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

不幸的是,AFAIK 无法在 excel 中设置"第 2 行到无穷大"的范围。 所以像"A2:A"这样的东西是行不通的。

若要演示,请尝试使用验证列表在 Excel 中手动创建工作表并保存(与代码无关)。 在所有 A 列上设置值列表,然后单击 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。 所以没有理由你不能做同样的事情。

相关内容

  • 没有找到相关文章

最新更新