我有一张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
答案 0 :(得分:2)
MSForms控件
foreach (Shape s in ws.Shapes)
{
//s.FormControlType.ToString();
}
<小时/> <击> ActiveX控件
foreach (Shape s in ws.Shapes)
{
//s.OLEFormat.progID.ToString();
}
即使它们是Excel中的形状,它们实际上也是C#的所有OLEObjects,并且它也更好地对待它们(更少的转换因为COM最初将它们视为Ole对象,Shape是Excel&#39; s便利等)。万一你想知道;
foreach (OLEObject obj in ws.OLEObjects())
{
// obj.progID.ToString();
}
你可能接下来需要一个switch语句,所以你知道你正在处理哪个控件,因为你已经恰当地注意到该复选框没有ListFillRange属性但是Value和Labels有Caption而不是价值等
击>