2014-02-11 8 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Исключение из HRESULT: 0x800A03EC при добавлении проверки достоверности данных

Am2 к Am50 имеет значения.

Может ли кто-нибудь помочь?

ответ

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; 
Смежные вопросы