获取types下拉列表的形状

这是我想要改进的一些可怕的代码:

Excel.Shapes theShapes = excelSheet.Shapes; foreach (Excel.Shape aShape in theShapes) { foreach (var groupItem in aShape.GroupItems) { //Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(groupItem)); var s = (Excel.Shape) groupItem; if (s is Excel.OLEObject) continue; try { if (s.FormControlType == Excel.XlFormControl.xlDropDown) { Console.WriteLine("### " + s.Name); } } catch (Exception e) { } } } 

有没有办法获得下拉列表更容易? 当我尝试获取FormControlType时,如何避免上述exception?

只要用一个确认它是FormControl的条件来replacetry...cath

 Excel.Shapes theShapes = excelSheet.Shapes; foreach (Excel.Shape aShape in theShapes) { foreach (var groupItem in aShape.GroupItems) { var s = (Excel.Shape) groupItem; if (s is Excel.OLEObject) continue; if (s.Type == Microsoft.Office.Core.MsoShapeType.msoFormControl) { if (s.FormControlType == Excel.XlFormControl.xlDropDown) { Console.WriteLine("### " + s.Name); } } } }