由于最近工作的需要,经常使用C#对excel进行编辑,但是由于有的excel中含有大量的控件所以,给工作带来了很多困扰。
为了能够随心所欲的操纵这些控件查询了很多资料,现在将得到的一点心得记录下来。
C#操作excel2007需要引入的dll
Microsoft.Office.Interop.Excel (正常读写文件,这个就足够了)
Microsoft.Vbe.Interop.Forms (这个是为了操作excel里的activeX控件)
相信大家都知道excel2007中的控件分为2种:1.Form控件 2.activex控件
//给命名控件起个别名方便写代码 using Excel = Microsoft.Office.Interop.Excel; using MSForms = Microsoft.Vbe.Interop.Forms; //打开excel Excel.Application excelApp = new Excel.Application(); //打开一个excel文件,open方法的参数大家可以去msdn上查询 Workbook analyWK = excelApp.Workbooks.Open(inputfileName, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //这里取得的是第一个sheet,大家根据自己的需要选择自己要操作的sheet Worksheet WS = (Excel.Worksheet)analyWK.Worksheets[1]; |
一下是对excel的控件的操作
上边说到了excel中含有2种控件,对于不同的控件的操作方法不太一样
对于Form控件的操作
Worksheet WS = (Excel.Worksheet)analyWK.Worksheets[1];
对于我们确定了要操作的worksheet可以直接调用Worksheet类中的方法直接拿出各种Form控件
例如Checkbox:
Excel.CheckBoxes a = (Excel.CheckBoxes)WS.CheckBoxes(Type.Missing);
这样我们就得到了一组Checkbox,也就是当前sheet中的全部checkbox的列表。
需要注意的是参数[Type.Missing],这个地方我试过很多别的内容都会出错,所以我们只能用这个来得到一个控件集合。
得到这个集合以后,用下面的方法可以得到单个控件Item的参数从[1]开始
Excel.CheckBox b = (Excel.CheckBox)a.Item(1);
这个控件b得到以后,我们就可以随意的蹂躏她了
对于ActiveX控件的操作
ActiveX控件的操作比较麻烦,它不能直接通过Worksheet类中的方法直接取出,
但是他也有比Form控件方便的地方,那就是他有name属性,可以通过name直接定位到一个控件上
方法如下:
Excel.OLEObject c = (Excel.OLEObject)WS.OLEObjects("chk");
这样我们能够得到一个name是“chk”的Actived控件,但是现在我们还不能够操作这个控件
我们需要把这个控件转换成他相应类型的控件
例如他是一个CheckBox控件,用如下的方法把控件类型转换
MSForms.CheckBox d = (MSForms.CheckBox)c.object();
取值,取得的值是一个object需要大家自己根据需要转换
object o = d.get_Value();
赋值,赋值时候也是一个object而且是ref
object o = true;
d.set_Value(ref o);
其他的
object adaa = WS.Shapes.Count;//用于确定全部有图形的对象的数目,包括了各种控件
WS.OLEObjects(Type.Missing)//得到了全部的ActiveX控件,然后可以用item方法得到其中某个控件