【问题标题】:Add List Validation to Column except the first two rows将列表验证添加到除前两行之外的列
【发布时间】:2015-04-21 06:10:40
【问题描述】:

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

请问有什么帮助吗?

【问题讨论】:

    标签: excel validation c#-4.0 epplus epplus-4


    【解决方案1】:

    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);
    

    【讨论】:

      【解决方案2】:

      不幸的是,AFAIK 无法在“第 2 行到无穷大”的 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。所以没有理由你不能这样做。

      【讨论】:

      • Ernie 是对的,没有办法满足您的要求。我的解决方法是使用 2 张纸。第一张表我显示了我不可编辑的详细信息,然后我创建了第二张表让我的用户输入他们的数据
      • 感谢您的回复,我想我会使用“A2:A1048576”地址。 1,048,576 对我来说足够大了。谢谢@ernie
      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      相关资源
      最近更新 更多