添加数据验证时出现 HRESULT: 0x800A03EC 异常

3
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有值。

请问有人可以帮忙吗?

2个回答

0

我也遇到了这个异常,后来发现是因为 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;

0

应该是这样的

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

您有G2,G50,其中逗号显然是一个“联合”运算符。相反,您想要一个范围运算符(请参见此处),以匹配相同大小的范围AM2:AM50。


即使这样也无法解决问题。 - user2124167
我在进行更多的研究后改变了答案。 - agentnega
@agentnega 验证范围不需要与应用它的范围大小相同。 - Rachel Hettinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接