在使用 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, ],sheet.Cells[beginRowIndex, ]);
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) + , (int)r3_top, , );
Microsoft.Office.Interop.Excel.CheckBox ckb1 = sheet.CheckBoxes(checkBoxShape1.ZOrderPosition) as Microsoft.Office.Interop.Excel.CheckBox;
ckb1.Text = "关闭"; // checkBox 显示的文本
ckb1.Value = ; // 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 = ;
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 的属性进行设置。

C#导出 Excel 时, 生成 CheckBox 控件的更多相关文章

  1. checkBox控件的CheckedChanged与CheckedStateChanged区别

    Checked属性为bool类型,CheckState属性为枚举类型(CheckState.Checked.CheckState.Unchecked和CheckState.Indeterminate) ...

  2. Android开发CheckBox控件,全选,反选,取消全选

    在Android开发中我们经常会使用CheckBox控件,那么怎么实现CheckBox控件的全选,反选呢 首先布局我们的界面: <?xml version="1.0" enc ...

  3. 继续聊WPF——自定义CheckBox控件外观

    上一篇文章中谈到了BulletDecorator控件,就是为自定义CheckBox控件的模板做准备,因为CheckBox需要比较严格的布局,正好,BulletDecorator控件就合适了,该控件的布 ...

  4. 使用js获取checkbox控件在GridView中的第几行

    这次的知识点是如何使用js获取checkbox控件所在的是第几行!!! 我们可以使用 JavaScript 中自带的 rowIndex 和 cellIndex 来获取行和列的键值 (从0开始) 这两个 ...

  5. WPF-控件-DataTemplate生成的控件

    <Window x:Class="由DataTemplate生成的控件.MainWindow" xmlns="http://schemas.microsoft.co ...

  6. WPF-控件-ControlTemplate生成的控件

    <Window x:Class="由ControlTemplate生成的控件.MainWindow" xmlns="http://schemas.microsoft ...

  7. CheckBox控件

    前台代码: <asp:CheckBox ID="CheckBox1" runat="server" Text ="苹果"/> & ...

  8. Swift - 生成各种控件的工厂类(包含标签,按钮,输入框等)

    在iOS开发中,页面里有时会大量的用到一些控件,如果要一个个单独创建再设置样式的话就显得很麻烦.我们可以创建一个生成各种控件的工厂类,这样在需要的时候调用下就可以了. 下面以一个自定义的工厂类为例,其 ...

  9. asp.net中的CheckBox控件的使用

    CheckBox控件中的最重要属性就是checked属性了 下面就是使用checked属性的一个小应用; 先建立一个wed窗体:在窗体中写下这些代码: <%@ Page Language=&qu ...

随机推荐

  1. flask 手机号码正则匹配的简单操作

    1 导包 Import re 2 匹配邮箱 ret=re.match("[a-zA-Z0-9]{4,20}@163\.com",字符串) If ret: print(ret.gro ...

  2. Vue基础之内部指令(下)

    v-on绑定事件监听器 直接撸代码: <div id="app"> <h2>计数器</h2> number:{{number}} <but ...

  3. Python之删除空白

    Python能够找出字符串开头.末尾.两端多余的空白. lstrip()方法可以剔除字符串开头的空白: rstrip()方法可以剔除字符串末尾的空白: strip()可以剔除字符串两端的空白: fav ...

  4. ROS * 通过launch文件添加多个模型

    我添加的是dae模型,urdf文件过两天贴 方法一 : <launch> <!-- these are the arguments you can pass this launch ...

  5. Visible Lattice Points SPOJ - VLATTICE 三维+莫比乌斯反演

    #include<bits/stdc++.h> #define ll long long using namespace std; ; int vis[maxn]; int mu[maxn ...

  6. cf549B Looksery Party 贪心

    题目大意:有n个员工,每个员工通讯录里有自己的号码和其他一些员工的号码.现在有若干员工参加一个聚会,他们会给自己通讯录里所有的人发一条短信,包括自己.现在有个人预测了每个员工会收到多少条短信,而你要寻 ...

  7. MySQL数据库 命令行 学习笔记(一)

    常用关系型数据库1 MySQL:开源免费的适用于中小型企业的免费数据库2 oracle:甲骨文公司,商业软件,收费,适用于大型电商网站3 db2:IBM公司,银行系统主要采用db24 SqlSever ...

  8. 在Ubuntu15.10中,使用wxPython的webview和JS进行交互

    在Ubuntu下进行wxPython开发,因为需求,所以使用了wxPython的webview和JS的交互. 在Windows下,下图显示的代码可以正常的运行,但是在Ubuntu下进行开发,以下的代码 ...

  9. MySQL和MySQL的注释方式

    MySQL的注释方式   mysql 服务器支持如下几种注释方式: (1) # 到该行结束     # 这个注释直到该行结束 mysql> SELECT 1+1; (2)-- 到该行结束     ...

  10. docker(基础篇)

    http://naotu.baidu.com/file/f02773930afb2d3d9e71621249099d31 centos7安装  https://yq.aliyun.com/articl ...