从HRESULTexception:0x800A03EC添加数据validation

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

最后一行是抛出exception0x800A03EC

Am2Am50有值。

任何人都可以请帮忙?

它应该是

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

你有G2,G50 ,逗号显然是一个“联盟”运营商。 相反,你需要一个范围操作符(见这里 )来匹配相同大小的范围AM2:AM50。

我也有这个例外,我想出了这是因为Worksheet.Selection。
我没有弄清楚,这与数据validation有什么联系,但是我会研究它并让你知道。

为了解决你的问题,你应该做这样的事情:

  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;