2014-02-11 70 views
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异常:0x800A03EC添加数据验证时

Am2Am50具有值。

任何人都可以请帮忙吗?

回答

0

应该

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

你有G2,G50在逗号显然是一个“联盟”运营商。相反,您需要范围运算符(请参阅here)以匹配相同大小的范围AM2:AM50。

+0

即使这不是解决问题 – user2124167

+0

我改变了答案后,一些调查研究。 – agentnega

+0

@agentnega验证范围不必与其应用的范围大小相同。 –

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; 
相关问题