在使用 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 方法有三个参数:spa
第一个参数: 表示控件的类型,是个枚举类型,能够是button , listbox, pictureBox, textBox, label 等, winform 中经常使用 的控件 excel
第二个参数: 表示 添加的控件的位置,X轴坐标,即当前单元格的左边距(left)属性,int 类型code
第三个参数: 表示 添加的控的位置, Y 轴坐标,即当前单元格的 顶部边距(top) 属性,int 类型orm
第四个参数: 控件的宽度, int 类型blog
第五个参数: 控件的高度, int 类型接口
特别提示: 第四个参数和第五个参数,不管怎么改变,控件 的文字大小是不会变的, 要想改变控件显示的字体大小,要使用 checkBoxShape1.TextEffect.FontSize 这个属性来设置, 但在运行时,不管值 怎么设置,都会抛出一个异常: TextEffect 引起了异常, 设置的值超出了范围, 对于这个,至今没有找到解决的办法 , 若是哪位大侠知道缘由或怎么解决,望多多领教。get
shapes 添加 好后,就能够用 sheet.CheckBoxes(checkBoxShape2.ZOrderPosition) as Microsoft.Office.Interop.Excel.CheckBox; 这行代码来获取建立的 checkBox, 而后对 checkBox 的属性进行设置。it