在使用 Microsoft.Office.Interop.Excel 组件导出Excel 表格时,要把导出前的  CheckBox 控件一同导出到 excel 表格中,对于这个功能 看似很简单,但 Microsoft.Office.Interop.Excel 在生成 CheckBox 时,遇到了很大的问题,就是不能生成 CheckBox, 网上找了些资料,但这方面还是很少,有的解决方案中使用 Spire.XLS 这个组件 ,会很容易导出一个 CheckBox, 但这个组件不是免费的,有的建议使用 NPOI 这个免费开源的组件,那么问题来了,所有的导出excel 的代码就要重写,这显然增加了难度和工作量,在不改变组件的情况下,怎么才能把 CheckBox 控件导出到excel 表格中, 在研究了 Microsoft.Office.Interop.Excel 的相关接口中,终于发现可以这样导出,具体 代码如下 :

              Range r003 = sheet.get_Range(sheet.Cells[beginRowIndex, 4],sheet.Cells[beginRowIndex, 5]);
                r003.MergeCells = true;
                double r3_left = (double)r003.Left;
                double r3_top = (double)r003.Top;
                Shape checkBoxShape1 = sheet.Shapes.AddFormControl(XlFormControl.xlCheckBox, (int)r3_left + 40, (int)r3_top, 50, 15);
                Shape checkBoxShape2 = sheet.Shapes.AddFormControl(XlFormControl.xlCheckBox, ((int)r3_left) + 110, (int)r3_top, 50, 15);
                Microsoft.Office.Interop.Excel.CheckBox ckb1 = sheet.CheckBoxes(checkBoxShape1.ZOrderPosition) as Microsoft.Office.Interop.Excel.CheckBox;
                ckb1.Text = "关闭";  // checkBox 显示的文本
                ckb1.Value = 0; // 0: 末选中, 1:选 中
                ckb1.Enabled = false;  // false: 不可编辑, true: 可编辑
                Microsoft.Office.Interop.Excel.CheckBox ckb2 = sheet.CheckBoxes(checkBoxShape2.ZOrderPosition) as Microsoft.Office.Interop.Excel.CheckBox;
                ckb2.Text = "未关闭";
                ckb2.Value = 0;
                ckb2.Enabled = false;

  首先要 调用  Shapes.AddFormControl 的方法,先向Shapes 集合中添加一个 CheckBox 控件,才能调用 ,不然 Shapes 集合是空的,没有控件。AddFormControl 方法有三个参数:

   第一个参数: 表示控件的类型,是个枚举类型,可以是button , listbox, pictureBox, textBox, label 等, winform  中常用 的控件 

   第二个参数: 表示  添加的控件的位置,X轴坐标,即当前单元格的左边距(left)属性,int 类型

   第三个参数: 表示 添加的控的位置, Y 轴坐标,即当前单元格的 顶部边距(top) 属性,int 类型

   第四个参数: 控件的宽度, int 类型

   第五个参数: 控件的高度, int 类型

  特别提示: 第四个参数和第五个参数,无论怎么改变,控件 的文字大小是不会变的, 要想改变控件显示的字体大小,要使用  checkBoxShape1.TextEffect.FontSize 这个属性来设置, 但在运行时,无论值 怎么设置,都会抛出一个异常: TextEffect 引发了异常, 设置的值超出了范围, 对于这个,至今没有找到解决的办法 , 如果哪位大侠知道原因或怎么解决,望多多领教。

shapes 添加 好后,就可以用  sheet.CheckBoxes(checkBoxShape2.ZOrderPosition) as Microsoft.Office.Interop.Excel.CheckBox; 这行代码来获取创建的 checkBox, 然后对 checkBox 的属性进行设置。

 

 

   

posted on 2018-11-16 18:39  wisdo  阅读(2506)  评论(0编辑  收藏  举报