从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而不是值等。