这是一篇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[];
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[] { , }, ckbs);
dr["销售渠道"] = getCheckString(new int[] { , , , }, 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[] { , , , }, 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[] { , , , , , , }, 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=;i<resultDt.Columns.Count;i++)
{
sheet.Cells[, i + ] = resultDt.Columns[i].ColumnName; }
sheet.Cells.get_Range("A1", "V1").Font.Bold = true; //设置字体为粗体
sheet.Cells.get_Range("A1", "V1").Font.Size = ; //设置字体大小
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+)).Borders.LineStyle = ; //设置整个数据区边框为实线 for (int row = ; row < resultDt.Rows.Count; row++)
{
for (int col = ; col < resultDt.Columns.Count; col++)
{
sheet.Cells[row + , col + ] = resultDt.Rows[row][col].ToString();
}
} book.Close(true, filesavePath, Type.Missing);
excel.Quit(); label2.Text = "已成功导出到文件:"+filesavePath;

源码下载:  CODE

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

  1. jquery完成带复选框的表格行高亮显示

    jquery完成带复选框的表格行高亮显示 通过jquery技术来操作表格是件简单的事,通过jquery的语法,可以很轻松的完成表格的隔行换色,悬浮高亮,在实际的应用中可能会出现表格中带复选框的,删除时 ...

  2. 雷林鹏分享:jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单

    jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单 easyui 的树(Tree)插件允许您创建一个复选框树.如果您点击一个节点的复选框,这个点击的节点信息将向上和向下继承.例如:点击 ...

  3. WPF:带复选框CheckBox的树TreeView

    最近要用WPF写一个树,同事给了我一个Demo(不知道是从哪里找来的),我基本上就是参照了这个Demo. 先放一下效果图(3棵树): 这个树索要满足的条件是: 父节点.Checked=true时,子节 ...

  4. 关于JFace带复选框的树

    树的复选框用CheckboxTreeViewer实现.由于其子类ContainerCheckedTreeViewer在没有选择全部子节点时可以自动将父节点设置成灰选,所以实现树的复选框更多的是用Con ...

  5. 关于textjs的tree带复选框的树

    通过查阅一些资料和自己之前了解到的一些相关知识,有时项目中需要用到.话不多说,先看一下效果图: 我写的这人员选择的树,主要是改写了TreePanel,如下代码: ExtendTreePanel.js ...

  6. easyUI带复选框的组合树

    代码: <input id="depts"><script type="text/javascript">$(document).rea ...

  7. 实现带复选框的TreeView控件

    实现效果: 知识运用: TreeView控件的CheckView属性 //是否在树形视图控件中显示复选框 public bool CheckBoxs{ get;ser } 实现代码: TreeView ...

  8. 制作带复选框的ListView控件

    实现效果: 知识运用   ListView控件的GridLines //设置是否在ListView控件中显示网格线 public bool GridLines{get;set} 和CheckBoxes ...

  9. WindowsForm ComboBoxList 下拉框带复选框 可以动态添加

    先来张效果图: 1.这里需要对控件进行重写,详细内容如下,对此不感兴趣的可以直接跳过这步,下载本人生成的dll,直接看第二小结,下载链接https://pan.baidu.com/s/1gfzrK5t ...

随机推荐

  1. [整]Android SlidingMenu Demo 环境搭建

    1. 下载ActionBarSherlock https://github.com/JakeWharton/ActionBarSherlock 2. 下载SlidingMenu https://git ...

  2. ubuntu 下没有pthread库以及报undefined reference to 'pthread_create'的解决方法

    https://blog.csdn.net/dyzhen/article/details/79058554

  3. 【LibreOJ】#6392. 「THUPC2018」密码学第三次小作业 / Rsa 扩展欧几里得算法

    [题目]#6392. 「THUPC2018」密码学第三次小作业 / Rsa [题意]T次询问,给定正整数c1,c2,e1,e2,N,求正整数m满足: \(c_1=m^{e_1} \ \ mod \ \ ...

  4. bug处理

    当提示405 method not allowed 时候,路由可能有问题,看看路由是get/post 是否合格

  5. 洛谷 P1603 斯诺登的密码

    我一开始还没看懂非正规数字的意义,以为那里写的单词不算,蒙了好久,而且这题非常考验仔细程度,一不小心就RE,WA. 嗯,好像讲了些废话,那我们看看思路,我的做法和前面的大佬们有些不同,因为这题只有六个 ...

  6. Windows入侵问题排查

    1.深入分析,查找入侵原因 1.1 检查帐户和弱口令 1.查看服务器已有系统或应用帐户是否存在弱口令 检查说明:主要检查系统管理员帐户.网站后台帐户.数据库帐户以及其他应用程序(FTP.Tomcao. ...

  7. 小白学习安全测试(四)——扫描工具-Vega

    WEB扫描工具-Vega 纯图形化界面,Java编写的开源web扫描器.两种工作模式:扫描模式和代理模式[主流扫描功能].用于爬站.处理表单,注入测试等.支持SSL:http://vega/ca.cr ...

  8. ASP .Net Core系统部署到SUSE Linux Enterprise Server 12 SP3 64 具体方案

    .Net Core 部署到 SUSE Linux Enterprise Server 12 SP3 64 位中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk-2. ...

  9. Java编程的逻辑 (10) - 强大的循环

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  10. Java编程的逻辑 (36) - 泛型 (中) - 解析通配符

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...