【问题标题】:Exception from HRESULT: 0x800A03EC when adding data validationHRESULT 异常:添加数据验证时出现 0x800A03EC
【发布时间】:2014-02-11 05:39:06
【问题描述】:
int row_index = 2;
foreach (DataRow row in dataTableSourceSystem.Rows)
{
    xlWorkSheet.get_Range("AM" + row_index.ToString(), System.Reflection.Missing.Value).Value2 = row["LookupShortName"].ToString();
    row_index++;
}
Range range = xlWorkSheet.get_Range("G2,G50");

range.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, XlFormatConditionOperator.xlBetween, "=$AM2:$AM50", System.Reflection.Missing.Value);

最后一行是抛出异常0x800A03EC

Am2Am50 有值。

有人可以帮忙吗?

【问题讨论】:

    标签: c# asp.net excel


    【解决方案1】:

    应该是

    Range range = xlWorkSheet.get_Range("G2:G50");
    

    您有G2,G50,其中逗号显然是“联合”运算符。相反,您希望范围运算符(请参阅here)匹配相同大小的范围 AM2:AM50。

    【讨论】:

    • 即使这样也不能解决问题
    • 经过一番研究,我改变了答案。
    • @agentnega 验证范围不需要与应用范围相同。
    【解决方案2】:

    我也有这个异常,我发现这是因为 Worksheet.Selection。
    我还没弄清楚这与数据验证有什么联系,但我会调查一下并告诉你。

    为了解决您的问题,您应该这样做:

     xlWorkSheet.Range["$A$1"].Select();
     Range range = xlWorkSheet.get_Range("G2,G50");
     Validation v = range.Validation;
    
     // you might want to delete validation first
     // v.Delete();
    
     v.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, XlFormatConditionOperator.xlBetween, "=$AM2:$AM50", System.Reflection.Missing.Value);
    
     // some other useful stuff for you
     // v.ErrorMessage = "You need to fill in a value from the validation list.";
     // v.InCellDropdown = true;
    

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      相关资源
      最近更新 更多