从Excel形状中获取形状types

我有一个Excel工作表,有一些combobox和checkbox。

我正在尝试阅读他们select的值。 我的代码工作正常,如果有checkboxcombobox和崩溃,因为它们中没有ListFillRange。

如何获取形状的形状types,以便我的函数GetControlValue可以返回所有控件types的值。

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

MSForms控件

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

ActiveX控件

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

尽pipe它们是Excel中的形状,但实际上它们都是用于C#的OLEObjects,最好也是这样处理它(不如使用COM来处理它们,最初将它们视为Ole对象,Shape是Excel的便利等)。 如果你想知道

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

您可能接下来需要一个switch语句,以便您知道正在处理的是哪个控件,因为您恰当地注意到该checkbox没有ListFillRange属性,但Value和Labels具有Caption而不是值等。