C# 读带复选框的excel,写excel并设置字体、边框、背景色

引用:http://www.cnblogs.com/tuyile006/p/3977177.html

这是一篇excel读写功能大汇总,通过C#调用Microsoft.Office.Interop.Excel.dll才能完成任何复杂格式excel的读写操作。

本文需要读取的excel格式如下:

可见表格极不规则,且含有复选框等控件,现在需要将这种表格中的数据提取出来。

要求将提取出来的数据写入到明细表结构的excel中,格式如:

这是我们常见的table表样式,但需要操作excel的字体、背景颜色和边框样式。

为完成以上工作,我们先引用Microsoft.Office.Interop.Excel.dll控件:

程序中添加using引用:

using Excel = Microsoft.Office.Interop.Excel;

读取复杂excel格式数据的代码如下:

 private void GetData(string excelPath)
        {
            Excel.Application excelapp = new Excel.Application();
            Excel.Workbook wb = excelapp.Workbooks.Open(excelPath);
            Excel.Worksheet WS = (Excel.Worksheet)wb.Worksheets[1];
            Excel.CheckBoxes ckbs = (Excel.CheckBoxes)WS.CheckBoxes(Type.Missing);

            //读取复选框的值
            //Excel.CheckBox cbt = (Excel.CheckBox)ckbs.Item(1);
            //MessageBox.Show(cbt.Value + " " + cbt.Caption);

            //读取单元格的值
            //MessageBox.Show(WS.Cells.get_Range("C2").Value);

            //读取excel数据到table中
            DataRow dr = resultDt.NewRow();
            dr.BeginEdit();
            dr["负责人"] = WS.Cells.get_Range("C2").Value;
            dr["所属区域"] = WS.Cells.get_Range("G2").Value;
            dr["填写时间"] = ((DateTime)WS.Cells.get_Range("K2").Value).ToShortDateString();
            dr["经销商姓名"] = WS.Cells.get_Range("C3").Value;
            dr["手机"] = WS.Cells.get_Range("E3").Value;
            dr["办公电话"] = WS.Cells.get_Range("H3").Value;
            dr["传真"] = WS.Cells.get_Range("K3").Value;
            dr["商业公司"] = WS.Cells.get_Range("C4").Value;
            //读取复选框的值
            dr["经销商性质"] = getCheckString(new int[] { 5, 6 }, ckbs);
            dr["销售渠道"] = getCheckString(new int[] { 7, 8, 9, 10 }, ckbs);
            dr["操作的主要区域"] = WS.Cells.get_Range("C6").Value;
            dr["分销的主要区域"] = WS.Cells.get_Range("I6").Value;
            dr["操作的主要医院"] = WS.Cells.get_Range("C7").Value;
            dr["经销商资金实力"] = getCheckString(new int[] { 1, 2, 3, 4 }, ckbs);
            dr["同行的评价"] = WS.Cells.get_Range("C9").Value;
            dr["专职医药代表人数"] = WS.Cells.get_Range("D10").Value;
            dr["市场推广专员人数"] = WS.Cells.get_Range("H10").Value;
            dr["销售主管姓名"] = WS.Cells.get_Range("L10").Value;
            //合并既往销售品种
            string hb = string.Empty;
            if (WS.Cells.get_Range("D11").Value!=null)
                hb = WS.Cells.get_Range("D11").Value + "/" + WS.Cells.get_Range("H11").Value + "/" + WS.Cells.get_Range("L11").Value;
            if (WS.Cells.get_Range("D12").Value!=null)
                hb += "、" + WS.Cells.get_Range("D12").Value + "/" + WS.Cells.get_Range("H12").Value + "/" + WS.Cells.get_Range("L12").Value;
            if (WS.Cells.get_Range("D13").Value!=null)
                hb += "、" + WS.Cells.get_Range("D13").Value + "/" + WS.Cells.get_Range("H13").Value + "/" + WS.Cells.get_Range("L13").Value;
            dr["既往销售主要品种数量方式"] = hb;
            dr["销售推广的操作模式"] = WS.Cells.get_Range("D14").Value;
            dr["客户强项关系"] = getCheckString(new int[] { 11, 12, 13, 14, 15, 16, 17 }, ckbs);
            dr["政府事务主要关系"] = WS.Cells.get_Range("D16").Value;
            dr.EndEdit();
            resultDt.Rows.Add(dr);

            //dataGridView1.DataSource = resultDt.DefaultView;

            wb.Close();
            excelapp.Quit();
        }

代码中已经很清楚了,特别强调的是,读取复选框的值比较麻烦一点,只有WS.CheckBoxes(Type.Missing)这个方法,直接得到excel中所有的checkbox,然后如何对应呢,如果checkbox是有text值,那还好一点,可以从text值来对应,如果复选框使用不规范,所有的复选框text属性都是空,那就麻烦了。真不巧我就是遇到一个这样的excel模板,于是先备份一份,然后在excel中把所有checkbox都添加上对应的text属性,然后在程序中遍历一下所有checkbox的index,这样就把index和text对应上了,再使用原先的模板,也不会去错值。

excel格式再复杂,我们要取的数据都会在一个个单元格里面,只要我们用WS.Cells.get_Range("C2").Value方法取值,就可以取到任何单元格,任何复杂格式的数据。

然后我们现在来看写操作,写excel有很多种方法,但要想控制excel的字体、边框、背景色等样式,就还是得用Microsoft.Office.Interop.Excel来完成。

写excel的代码如下:

 string filesavePath = saveFileDialog1.FileName;
                Excel.Application excel = new Excel.Application();
                Excel.Workbook book = excel.Workbooks.Add(Type.Missing);
                Excel.Worksheet sheet = (Excel.Worksheet)book.ActiveSheet;
                // Adds table headers
                for(int i=0;i<resultDt.Columns.Count;i++)
                {
                    sheet.Cells[1, i + 1] = resultDt.Columns[i].ColumnName;

                }
                sheet.Cells.get_Range("A1", "V1").Font.Bold = true; //设置字体为粗体
                sheet.Cells.get_Range("A1", "V1").Font.Size = 14; //设置字体大小
                sheet.Cells.get_Range("A1", "V1").EntireColumn.AutoFit();//自动调整列宽
                sheet.Cells.get_Range("A1", "V1").EntireRow.AutoFit();//自动调整行高
                sheet.Cells.get_Range("A1", "V1").Interior.Color = System.Drawing.ColorTranslator.ToOle(Color.Yellow);//设置背景色
                sheet.Cells.get_Range("A1", "V" + (resultDt.Rows.Count+1)).Borders.LineStyle = 1; //设置整个数据区边框为实线

                for (int row = 0; row < resultDt.Rows.Count; row++)
                {
                    for (int col = 0; col < resultDt.Columns.Count; col++)
                    {
                        sheet.Cells[row + 2, col + 1] = resultDt.Rows[row][col].ToString();
                    }
                }

                book.Close(true, filesavePath, Type.Missing);
                excel.Quit();

                label2.Text = "已成功导出到文件:"+filesavePath;

时间: 2024-08-15 23:55:22

C# 读带复选框的excel,写excel并设置字体、边框、背景色的相关文章

带复选框的下拉框

效果图: . css: <style type="text/css"> /* 带复选框的下拉框 */ ul li{ list-style: none; padding:0px; margin: 0px; } .select_checkBox{ border:0px solid red; position: relative; display:inline-block; } .chartQuota{ height:23px; float:left; display:inlin

Java中带复选框的微信牛牛房卡开发的实现和应用

在使用Java Swing开发微信牛牛房卡开发(h5.fanshubbs.com)程序时,很有可能会遇到使用带复选框的微信牛牛房卡开发的需求,但是Java Swing并没有提供这个组件,因此如果你有这个需求,你就得自己动身实现带复选框的树.CheckBoxTree与JTree在两个层面上存在差异:[li]在模型层上,CheckBoxTree的每个结点需要一个成员来保存其是否被选中,但是JTree的结点则不需要.[/li][li]在视图层上,CheckBoxTree的每个结点比JTree的结点多显

关于textjs的tree带复选框的树

通过查阅一些资料和自己之前了解到的一些相关知识,有时项目中需要用到.话不多说,先看一下效果图: 我写的这人员选择的树,主要是改写了TreePanel,如下代码: ExtendTreePanel.js (该文件中可以写一些触发事件) Ext.namespace('Ext.ysq');//Ext.namespace方法定义一个管理类的包,类似Java中定义的包名,目的是建立自己的一个对象名,方便管理,防止重复 Ext.ysq.ExtendTreePanel = Ext.extend(Ext.tree

WPF:带复选框CheckBox的树TreeView

最近要用WPF写一个树,同事给了我一个Demo(不知道是从哪里找来的),我基本上就是参照了这个Demo. 先放一下效果图(3棵树): 这个树索要满足的条件是: 父节点.Checked=true时,子节点全部选中(反之成立): 父节点.Checked=false时,子节点全部不选中(反之成立): 子节点存在部分节点选中,部分节点未选中时,父节点为非全选状态(null)(反之成立): 那么这个树究竟要怎么造出来呢? 由于用WPF,且用MVVM模式,故TreeView的ItemSource及复选框的选

关于JFace带复选框的树

树的复选框用CheckboxTreeViewer实现.由于其子类ContainerCheckedTreeViewer在没有选择全部子节点时可以自动将父节点设置成灰选,所以实现树的复选框更多的是用ContainerCheckedTreeViewer. TreeView4.java 1 public class TreeViewer4 { 2 public static void main(String[] args) { 3 new TreeViewer4().open(); 4 } 5 6 pu

制作带复选框的ListView控件

实现效果: 知识运用   ListView控件的GridLines //设置是否在ListView控件中显示网格线 public bool GridLines{get;set} 和CheckBoxes属性 //设置listView控件中各数据项是否显示复选框 public bool CheckBoxes{get;set} 以及ListViewItem数据项的Checked属性 //判断是否选中此数据项中的复选框 public bool Checked{get;set} 实现代码: private

JS实现带复选框的下拉菜单

这段时间在做后台的时候需要一个可以复选的下拉菜单,用到的是easyUI中的combo的Demo,先看看官方easyUI:http://www.jeasyui.com/documentation/index.php# ----------------------------------------------------------------------------------------------------------------------------------------------

vue.js带复选框表单的增删改差

近段时间由于公司项目要求,前端开始使用VUE框架进行开发,最近刚开始学习,做了一个表单的增删改查,和大家分享一下. 页面模型代码设计如下 <template> <div id="navi_108_page"> <i-button type="info" @click="adds">添加类型</i-button> <i-button type="warning" @click

AngularJS(六):表单-复选框

本文也同步发表在我的公众号"我的天空" 复选框 复选框只有两个值:true或者false,因此在AngularJS中,一般都是将复选框的ng-model绑定为一个布尔值属性,通过这两个布尔值来决定其勾选状态,以及通过其勾选状态来设置被绑定的属性值为true或false.我们来看以下示例: <body ng-app="myApp" ng-controller="person">     <form ng-submit="