DataGridView导出到Excel
来源:互联网 发布:施耐德plc软件下载 编辑:程序博客网 时间:2024/05/01 15:38
这几天做一个Winform的系统,需要用到将DataGridView导出成Excel,以前一直没有在意这些方面的问题,因为以前做VB的时候已经做过很多这方面的导出,所以总认为小菜一碟。
我用的是VS2005和Office2003。
可是真正使用的时候才发现问题多多:
首先是添加了Microsoft Excel11 Object Libray之后,发现引用里面的” Microsoft.Office.Interop.Excel”不能用。出现了一个可恶的黄色小感叹号。这可真愁坏我了。后来在网上查找原因,看到关于C#导出Excel的例子是很多,但是都没有涉及到这是什么问题,可能是他们没有遇到,所以没有说。
不过有人说了使用Tlpimp.exe和Excel.olb来生成Excel.dll,然后引用就可以了。可是office2003中根本就找不到Excel.olb这东西。
后来终于看到了一篇上面说是安装office2003的时候要选择“.Net可编程性支持”。后来把office2003修改了下,重新选择安装了“.Net可编程性支持”。重新在工程中引用之后,呵呵,终于没有再出现这可恶而漂亮的黄色小感叹号。
我在查找这个问题的过程中,发现众多的兄弟都曾经遇到这样的问题,估计后面也会有千千万万的兄弟还可能会遇到这样的问题,为了能够增加点Google和Baidu的命中率,让更多的兄弟少走点弯路,所以把这个东西记录下来。也便于我自己后续的参考。
1、 安装office2003的时候,请选择“选择应用程序的高级自定义”如下图:
2、请选择“.Net可编程性支持”下选择菜单的“从本机运行全部程序”,如下图片。
3、成功引用了Excel之后,怎么使用?对于将DataGridView导出成Excel的应用来说,估计大家需要考虑的就是性能问题,如果一个导出操作要用户等几分钟甚至十几分钟的话,是很难让很多人接受的。具体的解释我也不做了,就把代码贴在这里好了。
public void DataGridView2Excel(System.Windows.Forms.DataGridView datagridview,string SheetName){ int iRows = 0; int iCols = 0; int iTrueCols = 0; Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Add(System.Reflection.Missing.Value); Microsoft.Office.Interop.Excel.Worksheet ws = null; if (wb.Worksheets.Count > 0) { ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1); } else { wb.Worksheets.Add(System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value); ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1); } if (ws != null) { if (SheetName.Trim() != "") { ws.Name = SheetName; } iRows = datagridview.Rows.Count; //加上列头行 iTrueCols = datagridview.Columns.Count; //包含隐藏的列,一共有多少列 //求列数,省略Visible = false的列 for (int i = 0; i < datagridview.Columns.Count; i++) { if (datagridview.Columns[i].Visible) iCols++; } string[,] dimArray = new string[iRows + 1, iCols]; for (int j = 0, k = 0; j < iTrueCols; j++) { //省略Visible = false的列 if (datagridview.Columns[j].Visible) { dimArray[0, k] = datagridview.Columns[j].HeaderText; k++; } } for (int i = 0; i < iRows; i++) { for (int j = 0, k = 0; j < iTrueCols; j++) { //省略Visible = false的列 if (datagridview.Columns[j].Visible) { dimArray[i + 1, k] = datagridview.Rows[i].Cells[j].Value.ToString(); k++; } } } ws.get_Range(ws.Cells[1, 1], ws.Cells[iRows + 1, iCols]).Value2 = dimArray; ws.get_Range(ws.Cells[1, 1], ws.Cells[1, iCols]).Font.Bold = true; ws.get_Range(ws.Cells[1, 1], ws.Cells[iRows + 1, iCols]).Font.Size = 10.0; ws.get_Range(ws.Cells[1, 1], ws.Cells[iRows + 1, iCols]).RowHeight = 14.25; //ws.Columns[.ColumnWidth = datagridview.Columns[0].Width; for (int j = 0, k = 0; j < iTrueCols; j++) { //省略Visible = false的列 if (datagridview.Columns[j].Visible) { ws.get_Range(ws.Cells[1, k + 1], ws.Cells[1, k + 1]).ColumnWidth = (datagridview.Columns[j].Width / 8.4) > 255 ? 255 : (datagridview.Columns[j].Width / 8.4); //ws.Columns.c = datagridview.Columns[j].Width; k++; } } } app.Visible = true;}
- DataGridView导出到Excel
- DataGridView导出到Excel
- DataGridView导出到Excel
- DataGridView导出到Excel
- DataGridView导出到Excel
- datagridview导出到Excel
- DataGridView导出数据到Excel
- datagridview数据导出到excel
- c# datagridview导出到excel
- 将datagridview导出到excel
- c# datagridview导出到excel
- DataGridView数据导出到Excel
- # datagridview导出到excel【转载】
- c# datagridview导出到excel
- C# DataGridView导出到Excel
- WinForm DataGridView导出到Excel
- 从 DataGridView 导出到 Excel
- [WinForm]dataGridView导出到EXCEL
- Linux-2.6 设备文件研究与分析
- 基于HNC语境理论的文本分类
- 学习指针不可少的好文章 ( 九 )
- 位段
- 阿男
- DataGridView导出到Excel
- 搜索引擎的全新领域——手机搜索
- CSS放入网页的几种方式
- Dreamweaver CS3网页制作之布局实例
- [转帖] 将数据导出成为excle格式
- 网页制作关于代码的18个小技巧
- 在WEB容器中获取持久化上下文
- 学校来了个美丽清纯的女生,好多人追求~
- php邮件群发系统