2014-02-11 57 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; 
相關問題