DataGridView导出到Excel的三个方法
原文:[转]DataGridView导出到Excel的三个方法

原文出处:http://www.yongfa365.com/Item/DataGridViewToExcel.html

#region DataGridView数据显示到Excel
/// <summary>
/// 打开Excel并将DataGridView控件中数据导出到Excel
/// </summary>
/// <param name="dgv">DataGridView对象 </param>
/// <param name="isShowExcle">是否显示Excel界面 </param>
/// <remarks>
/// add com "Microsoft Excel 11.0 Object Library"
/// using Excel=Microsoft.Office.Interop.Excel;
/// </remarks>
/// <returns> </returns>
public bool DataGridviewShowToExcel(DataGridView dgv, bool isShowExcle)
{if (dgv.Rows.Count == 0)return false;//建立Excel对象 Excel.Application excel = new Excel.Application();excel.Application.Workbooks.Add(true);excel.Visible = isShowExcle;//生成字段名称 for (int i = 0; i < dgv.ColumnCount; i++){excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;}//填充数据 for (int i = 0; i < dgv.RowCount - 1; i++){for (int j = 0; j < dgv.ColumnCount; j++){if (dgv[j, i].ValueType == typeof(string)){excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();}else{excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();}}}return true;
}
#endregion #region DateGridView导出到csv格式的Excel
/// <summary>
/// 常用方法,列之间加\t,一行一行输出,此文件其实是csv文件,不过默认可以当成Excel打开。
/// </summary>
/// <remarks>
/// using System.IO;
/// </remarks>
/// <param name="dgv"></param>
private void DataGridViewToExcel(DataGridView dgv)
{SaveFileDialog dlg = new SaveFileDialog();dlg.Filter = "Execl files (*.xls)|*.xls";dlg.FilterIndex = 0;dlg.RestoreDirectory = true;dlg.CreatePrompt = true;dlg.Title = "保存为Excel文件";if (dlg.ShowDialog() == DialogResult.OK){Stream myStream;myStream = dlg.OpenFile();StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));string columnTitle = "";try{//写入列标题for (int i = 0; i < dgv.ColumnCount; i++){if (i > 0){columnTitle += "\t";}columnTitle += dgv.Columns[i].HeaderText;}sw.WriteLine(columnTitle);//写入列内容for (int j = 0; j < dgv.Rows.Count; j++){string columnValue = "";for (int k = 0; k < dgv.Columns.Count; k++){if (k > 0){columnValue += "\t";}if (dgv.Rows[j].Cells[k].Value == null)columnValue += "";elsecolumnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();}sw.WriteLine(columnValue);}sw.Close();myStream.Close();}catch (Exception e){MessageBox.Show(e.ToString());}finally{sw.Close();myStream.Close();}}
}
#endregion#region DataGridView导出到Excel,有一定的判断性
/// <summary>
///方法,导出DataGridView中的数据到Excel文件
/// </summary>
/// <remarks>
/// add com "Microsoft Excel 11.0 Object Library"
/// using Excel=Microsoft.Office.Interop.Excel;
/// using System.Reflection;
/// </remarks>
/// <param name= "dgv"> DataGridView </param>
public static void DataGridViewToExcel(DataGridView dgv)
{#region   验证可操作性//申明保存对话框 SaveFileDialog dlg = new SaveFileDialog();//默然文件后缀 dlg.DefaultExt = "xls ";//文件后缀列表 dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";//默然路径是系统当前路径 dlg.InitialDirectory = Directory.GetCurrentDirectory();//打开保存对话框 if (dlg.ShowDialog() == DialogResult.Cancel) return;//返回文件路径 string fileNameString = dlg.FileName;//验证strFileName是否为空或值无效 if (fileNameString.Trim() == " "){ return; }//定义表格内数据的行数和列数 int rowscount = dgv.Rows.Count;int colscount = dgv.Columns.Count;//行数必须大于0 if (rowscount <= 0){MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}//列数必须大于0 if (colscount <= 0){MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}//行数不可以大于65536 if (rowscount > 65536){MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}//列数不可以大于255 if (colscount > 255){MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}//验证以fileNameString命名的文件是否存在,如果存在删除它 FileInfo file = new FileInfo(fileNameString);if (file.Exists){try{file.Delete();}catch (Exception error){MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}}#endregionExcel.Application objExcel = null;Excel.Workbook objWorkbook = null;Excel.Worksheet objsheet = null;try{//申明对象 objExcel = new Microsoft.Office.Interop.Excel.Application();objWorkbook = objExcel.Workbooks.Add(Missing.Value);objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;//设置EXCEL不可见 objExcel.Visible = false;//向Excel中写入表格的表头 int displayColumnsCount = 1;for (int i = 0; i <= dgv.ColumnCount - 1; i++){if (dgv.Columns[i].Visible == true){objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();displayColumnsCount++;}}//设置进度条 //tempProgressBar.Refresh(); //tempProgressBar.Visible   =   true; //tempProgressBar.Minimum=1; //tempProgressBar.Maximum=dgv.RowCount; //tempProgressBar.Step=1; //向Excel中逐行逐列写入表格中的数据 for (int row = 0; row <= dgv.RowCount - 1; row++){//tempProgressBar.PerformStep(); displayColumnsCount = 1;for (int col = 0; col < colscount; col++){if (dgv.Columns[col].Visible == true){try{objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();displayColumnsCount++;}catch (Exception){}}}}//隐藏进度条 //tempProgressBar.Visible   =   false; //保存文件 objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value);}catch (Exception error){MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}finally{//关闭Excel应用 if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);if (objExcel.Workbooks != null) objExcel.Workbooks.Close();if (objExcel != null) objExcel.Quit();objsheet = null;objWorkbook = null;objExcel = null;}MessageBox.Show(fileNameString + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);}#endregion

posted on 2015-12-29 15:49 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/5085956.html

DataGridView导出到Excel的三个方法相关推荐

  1. [转]asp.net导出数据到Excel的三种方法

    原文出处:asp.net导出数据到Excel的几种方法(1/3) .asp.net导出数据到Excel的几种方法(2/3).asp.net导出数据到Excel的几种方法(3/3) asp.net导出到 ...

  2. Winform 中 dataGridView 导出到Excel中的方法总结

    最近,在做CS端数据导出到Excel中时网上找了很多代码感觉都不是自己想要的,通过自己的整理归纳得到一个比较通用的方法,就给大家分享一下: 该方法需要用到两个参数(即对象),一个  DataGridV ...

  3. PDF如何转Excel?三种方法教你实现PDF转Excel,亲测实用又有效!

    有时候,我们需要将PDF表格数据导入到其他应用程序中,例如PPT.Word等.在这种情况下,将PDF表格数据转换成EXCEL格式可以更加方便地进行数据的导入和使用.PDF如何转Execl呢,分享三种有 ...

  4. mysql查询结果导出excel_Mysql查询结果导出为Excel的几种方法

    本文地址:http://www.cnblogs.com/qiaoyihang/p/6398673.html 具体原文找不到了,此篇是借鉴门户的一篇文章 方法一: 查询语句直接输出 语法格式: Exam ...

  5. NPOI 将DataGridView导出到Excel

    导出为xls格式用HSSF,xlsx用XSSF. 1.类 using System; using System.Collections.Generic; using System.Linq; usin ...

  6. 将datatable导出为excel的三种方式(转)

    一.使用Microsoft.Office.Interop.Excel.DLL 需要安装Office 代码如下: 2 publicstaticboolExportExcel(System.Data.Da ...

  7. php生成标准excel表格,php导出生成excel表格几种方法介绍

    利用php导出excel我们大多会直接生成 csv文件,这种方便快捷如果不是要求很高,完全可以利用csv 来实例了, 这是最简单的了 代码如下 复制代码 $tx='表头'; echo $tx.&quo ...

  8. [WinForm]dataGridView导出到EXCEL

    方法一: SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Execl files (*.xls)|*.xls"; ...

  9. 导出为excel无法引用解决方法

    引用的时候没有上述选项 解决方法: 1.点击浏览(工程-引用) 2.查找范围为excel所在的位置,文件名为EXCEL.EXE,文件类型选择所有文件 这样操作之后在引用就可以了

最新文章

  1. 开源 java CMS - FreeCMS2.6 静态化管理
  2. 仿WINDWS无限级Ajax菜单树升级1.2版(菜单名支持非法字符)
  3. 滑模控制中消除抖振的本质
  4. 【Java学习笔记二】继承和多态
  5. gd32 定时器时钟_漫谈LiteOS之开发板-Timer(基于GD32450i-EVAL)
  6. Compiling XORP v1.2 in Debian 3.1
  7. c语言程序设计贪吃蛇报告,C语言“贪吃蛇”程序设计报告.doc
  8. matlab找零钱,自动售货系统
  9. Android系统启动过程-uBoot+Kernel+Android
  10. Windows VScode SSH连接 Bad owner or permissions on C:\\Users\\admin/.ssh/config 错误解决方法
  11. python桌面精灵_360uu游戏盒子
  12. mac最值得关注的终端工具,全功能串行终端管理软件Serial
  13. error An unexpected error occurred: “https://registry.npmjs.org/react: ETIMEDOUT“.
  14. Human-in-the-Loop Optimization of Exoskeleton Assistance Via Online Simulation of Metabolic Cost
  15. JR/T 0223—2021 金融数据安全 数据生命周期安全规范
  16. 开始CentOS世界 从yum搭建lnmp环境开始,root的密码破解,定时任务, 后续其他功能 redHat5.4
  17. 基于java的动漫网购商城【原创】
  18. deadline(deadline是什么意思)
  19. 若要运行此应用程序,您必须首先安装,NET Framework的以下版本之一(附链接)
  20. 揭开Docker的面纱(理论+安装)

热门文章

  1. word计算机排版怎么选,Word选择题选项对齐排版方法 查找替换工具搞定
  2. python数据加载常规教程_Python加载数据的5种不同方式(收藏)
  3. python客户端服务器_Python客户端和服务器ch
  4. php stomp rabbitmq,php实现通过stomp协议连接ActiveMQ操作示例
  5. java多线程_Java多线程
  6. 内存溢出 permgen_通过增加堆内存/ Permgen空间来修复Eclipse OutOfMemory错误
  7. C++正则表达式创建匿名函数
  8. 分享一些Java常见的面试题,大厂都爱用
  9. 12_第一个Flutter程序
  10. linux不能上网问题