Получение типа формы из фигур Excel

У меня есть лист Excel, в котором есть несколько полей со списком и флажки.

Я пытаюсь прочитать их выбранные значения. Мой код отлично работает, если есть поля со списком и вылетает на Checkbox, потому что в них нет ListFillRange.

Как мне получить тип формы фигур, чтобы моя функция GetControlValue могла возвращать значения всех типов элементов управления.

foreach (Excel.Shape s in ws.Shapes)
{
    string value = GetControlValue(ws, s.Name);
}


private string GetControlValue(Excel.Worksheet ws, String shapeName)
{
    var selValue = ws.Shapes.Item(shapeName).ControlFormat.Value;

    //the fill range
    var r = ws.Shapes.Item(shapeName).ControlFormat.ListFillRange;
    var oRng = ws.Range[r];
    var selectedValue = oRng.get_Item(selValue).Value;
    return selectedValue;

}

Существует также одно перечисление MsoShapeType, но оно всегда возвращает msoFormControl.


person Pankaj    schedule 12.05.2014    source источник


Ответы (1)


MSForms элементы управления

foreach (Shape s in ws.Shapes)
{
    //s.FormControlType.ToString();
}


Элементы управления ActiveX

foreach (Shape s in ws.Shapes)
{
    //s.OLEFormat.progID.ToString();
}

Несмотря на то, что они являются фигурами в Excel, на самом деле все они являются объектами OLEObject для C#, и с ними лучше обращаться так же (меньше кастинга, потому что COM изначально рассматривает их как объекты Ole, форма - это удобство Excel и т. д.). В случае, если вы задавались вопросом;

foreach (OLEObject obj in ws.OLEObjects())
{
    // obj.progID.ToString();
}

Вам, вероятно, понадобится оператор switch, чтобы вы знали, с каким элементом управления вы имеете дело, поскольку вы точно заметили, что флажок не имеет свойства ListFillRange, но значение и метки имеют заголовок вместо значения и т. д.

person Community    schedule 12.05.2014
comment
Спасибо, да это Enumeration XlFormControl. Я искал, ваш ответ указал мне правильное направление. - person Pankaj; 12.05.2014
comment
@Pankaj извините за первоначальную путаницу, но я рад, что теперь все в порядке :) - person ; 12.05.2014