最近遇到了一个小任务:将界面dataGridView中的数据写入Excel表格中,并且需要实现读取Excel表格中的数据,然后更新到dataGridView控件中的功能。在这里呢,因为项目中的数据不能公开,所以我简化了dataGridView中的数据,但是表格读写功能是可以实现的。
一、这里为了新手能看的懂,下图是我窗体的布局和dataGridView初始化的数据,以及初始化dataGridView数据的代码。

 public void InitDataGridView(){for (int i = 0; i < 2; i++){dataGridView1.Rows.Add();}dataGridView1.Rows[0].Cells[0].Value = "张三";dataGridView1.Rows[0].Cells[1].Value = "1111";dataGridView1.Rows[0].Cells[2].Value = 300;dataGridView1.Rows[1].Cells[0].Value = "李四";dataGridView1.Rows[1].Cells[1].Value = "1112";dataGridView1.Rows[1].Cells[2].Value = 200;dataGridView1.Rows[2].Cells[0].Value = "王五";dataGridView1.Rows[2].Cells[1].Value = "1113";dataGridView1.Rows[2].Cells[2].Value = 300;dataGridView1.Height = dataGridView1.ColumnHeadersHeight + dataGridView1.Rows.Count * dataGridView1.Rows[0].Height;}

二、在项目中用Nuget工具下载Microsoft.Office.Interop.Excel.dll,为了方便新手,这里贴出了使用Nuget工具的方法,大神们可以跳过这一步。
右键项目名,点击“管理NuGet程序包”,选择“浏览”,输入
Microsoft.Office.Interop.Excel,最后点击下载即可(超级简单)


三、接下来就是将dataGridView 的数据写入Excel的代码啦,代码中有注释部分,如果有什么不清楚的欢迎在评论区讨论。

/// <summary>/// 创建一个Excel表格/// Excel中形如Cells[x][y]的写法,前面的数字是列,后面的数字是行!/// Excel中的行、列都是从1开始的,而不是0/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_CreateExcel_Click(object sender, EventArgs e){//创建一个文档实例Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();app.DisplayAlerts = false; //在程序运行时不被提示和警报消息打扰app.Workbooks.Add(true);app.ActiveSheet.Name = "总成绩统计表";       //工作表名//合并单元格Range range = app.get_Range("B2", "D2");   //合并B1~D1的位置range.ClearComments();   //清空要合并的区域range.MergeCells = true;  //合并单元格app.Cells[2][2].Value = "成绩统计表";      //设置单元格(刚刚合并的单元格)的内容app.Rows[2].RowHeight = 27;    //设置表格第二行的行高为27(磅)app.Rows[2].HorizontalAlignment = XlVAlign.xlVAlignCenter;    //设置表格第二行的内容居中app.Rows[2].RowHeight = 27;    //设置表格第二行的行高为27(磅)app.Rows[2].HorizontalAlignment = XlVAlign.xlVAlignCenter;    //设置表格第二行的内容居中app.Rows[3].RowHeight = 27;    app.Rows[3].HorizontalAlignment = XlVAlign.xlVAlignCenter;app.Rows[4].RowHeight = 27;app.Rows[4].HorizontalAlignment = XlVAlign.xlVAlignCenter;app.Rows[5].RowHeight = 27;app.Rows[5].HorizontalAlignment = XlVAlign.xlVAlignCenter;app.Rows[6].RowHeight = 27;app.Rows[6].HorizontalAlignment = XlVAlign.xlVAlignCenter;app.Cells[2].ColumnWidth = 9;                   //设置表格中第二列的列宽为9app.Cells[3].ColumnWidth = 9;                   app.Cells[4].ColumnWidth = 9;    //给表格增加边框,外部和内部都增加了for(int i = 2; i< dataGridView1.Rows.Count +  4;i++){Range range1;range1 = app.get_Range("B" + i.ToString(), "D" + i.ToString());range1.Borders.LineStyle = XlLineStyle.xlContinuous;}for (int i = 0; i < dataGridView1.Rows.Count; i++)        //行{for (int j = 0; j < dataGridView1.Columns.Count; j++) //列{app.Cells[j + 2][3] = dataGridView1.Columns[j].HeaderText;   //将dataGridView 中的列标题写入表格app.Cells[j + 2][i + 4] = dataGridView1.Rows[i].Cells[j].Value;      //将dataGridView 中的三行数据写入表格} }try{//设置新建表格的保存路径以及名称string path = "C:\\Users\\Administrator\\Desktop\\成绩表.xlsx";app.ActiveWorkbook.SaveAs(path);app.Quit();app = null;MessageBox.Show("创建表格成功");}catch(Exception ex){MessageBox.Show("创建表格失败" + ex.Message);}}

四、最后就是读取Excel表格的内容,具体请看下面代码部分。

 /// <summary>/// 读Excel表格,更新dataGridView显示/// ws.Cells[i,j] ,i是行,j是列/// ws.Cells[i][j],i是列,j是行/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_ReadExcel_Click(object sender, EventArgs e){OpenFileDialog openfile = new OpenFileDialog();openfile.Filter = "Excel 文件(*.xls;*.xlsx)|*.xls;*.xlsx";       //设置删选器openfile.Title = "打开";                         //对话框表标题openfile.RestoreDirectory = true;                //下次打开的是上次选择的目录if (openfile.ShowDialog() == DialogResult.OK){object missing = System.Reflection.Missing.Value;Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();Workbook wb = null;//以只读的形式打开Excel文件try{wb = excel.Workbooks.Open(openfile.FileName, missing, true, missing, missing, missing,missing, missing, missing, true, missing, missing, missing, missing, missing);}catch(Exception ex){MessageBox.Show("打开表格文件失败" + ex.Message);}//获取第一个工作表Worksheet ws = wb.Worksheets.get_Item(1);int rowsint = ws.UsedRange.Cells.Rows.Count;   //获取行数int colCount = ws.UsedRange.Cells.Columns.Count;//获取列数//将Excel表格中的值更新到Excel//因为我在程序初始化时已经设置dataGridView了行和列标题,所以这里直接读取行的数据更新一下dataGridView即可。没有Add行和更新列标题for (int i = 4; i <= rowsint + 1; i++)   //行,从表格的第四行开始循环{for (int j = 2; j <= colCount + 1; j++){dataGridView1.Rows[i - 4].Cells[j - 2].Value = ws.Cells[i,j].Value;}}                           }            }

五、最后的最后,我在过程中遇到了两个问题,这里也将解决板房放在这里
问题1:创建Excel的时候出现如图所示的问题:

解决办法:原因是名为“成绩表.xlsx”的表格已经打开,关闭这个表格即可
(如果电脑不存表格,则会创建,如果存在,则直接修改表格的内容)
问题二:读取表格时出现如下图的错误

解决办法:
1、打开Excel,选择文件——选项


2、点击“加载项”,“管理”处选择“COM 加载项”,点击“转到”

3、取消“FoxitReader PDF Creator COM Add-in”的勾选

4、大功告成

六、最后的最后的最后
在Vs2019中,无法通过帮助文档查看Microsoft.Office.Interop.Excel.dll中的一些用法,这里可以去到微软的官网,查看Microsoft.Office.Interop.Excel.dll。
上述的步骤已经将全部代码都贴了出来,没有什么其他的东西。如果有想要源码的,可以直接去下载
好了,本片文章就到这里了,欢迎大家在评论区留言交流!

C#Office.Interop.Excel.dll读写表格相关推荐

  1. c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件

    1.引用Microsoft.Office.Interop.Excel.dll 2.引用命名空间.使用别名 using System.Reflection; using Excel = Microsof ...

  2. Microsoft.Office.Interop.Excel.dll下载

    下载Microsoft.Office.Interop.Excel.dll http://files.cnblogs.com/fan0136/Microsoft.Office.Interop.Excel ...

  3. 数据转换excel操作 Microsoft.Office.Interop.Excel.dll的使用

    引用:http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到E ...

  4. 【转载】Excel操作 Microsoft.Office.Interop.Excel.dll的使用

    http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Exce ...

  5. NPOI写Excel,Microsoft.Office.Interop.excel.dll 转换Excel为PDF

    首先要引用NPOI动态库和Microsoft.Office.Interop.excel.dll (Microsoft.Office.Interop.excel.dll 下载链接 ,下载以后解压文件,把 ...

  6. 我的Office PIA之路(一) Microsoft.Office.Interop.Excel.dll 的获取

    最近有一个项目,是要用程序把学校里一个年级的学籍信息经过处理合成一个表,小学共六个年级,生成六张表,而且是*.xls文件,通过查找资料我决定使用Office PIA来试试.我最开始查到我资料是说要在A ...

  7. Excel操作 Microsoft.Office.Interop.Excel.dll的使用

    原文地址为: Excel操作 Microsoft.Office.Interop.Excel.dll的使用 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Exc ...

  8. C#项目添加excel引用Microsoft.Office.Interop.Excel.dll

    C#项目添加excel引用Microsoft.Office.Interop.Excel.dll zgscwxd 2019-01-21 15:40:26  2286  收藏 4 展开 如果需要使用C#处 ...

  9. 无法引用Microsoft.Office.Interop.Excel的解决

    微软MSDN文章: http://msdn.microsoft.com/zh-cn/library/aa159923(office.11).aspx 下载 在 Microsoft Office 200 ...

最新文章

  1. 深入理解ByteBuffer
  2. Java 使用 URLConnection 模拟 Http Get和Post 提交
  3. 【经典回放】多种语言系列数据结构算法:栈(JavaScript版)
  4. fc协议有哪些数据传输服务器,FC协议详解
  5. QT学习笔记(五):Qt5的8种标准对话框示例
  6. 用了 HTTPS,没想到还是被监控了!
  7. Spark精华问答 | spark性能优化方法
  8. Android逆向笔记-通过配置文件设置全屏(逆向开发与正向开发)
  9. [oracle原]访问局域网内出现“ORA-12541:TNS:无监听程序”
  10. 这几款 JVM 故障诊断处理工具,你还不会?
  11. oracle中变量前加冒号_oracle变量的定义和使用【转】
  12. Flink Next:Beyond Stream Processing
  13. 熟悉java的写什么毕业设计_计算机专业Java相关的毕业论文该如何写?
  14. 在python中安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))
  15. vue导入pdf插件报错
  16. 爱奇艺自研DRM技术斩获国家级专利奖 持续为内容创作者提供更高等级版权保护...
  17. 移动宽带frp内网穿透访问家中网络(by quqi99)
  18. 变桨滑环的功能与作用
  19. 开源推荐:碰撞检测算法fcl实现python-fcl
  20. react——mobx和redux的区别

热门文章

  1. 【计算方法】解线性方程组的直接法
  2. html5工业相机,AVT工业相机
  3. Unity 关于小地图的制作
  4. 超详细“CIDR地址块及其子网划分”
  5. cisco 无线ap ME和LAP模式切换
  6. linux使用make命令编译错误,有关linux的make文件编译问题
  7. 极智AI | 全场景算力产品矩阵 看算能系列AI产品
  8. 2019个人成长计划
  9. python pip install一些第三方库的时候error
  10. hdu4417 Super Mario(树状数组+离线区间操作)