1. #region DataGridView数据显示到Excel
  2. /// <summary>
  3. /// 打开Excel并将DataGridView控件中数据导出到Excel
  4. /// </summary>
  5. /// <param name="dgv">DataGridView对象 </param>
  6. /// <param name="isShowExcle">是否显示Excel界面 </param>
  7. /// <remarks>
  8. /// add com "Microsoft Excel 11.0 Object Library"
  9. /// using Excel=Microsoft.Office.Interop.Excel;
  10. /// </remarks>
  11. /// <returns> </returns>
  12. public bool DataGridviewShowToExcel(DataGridView dgv, bool isShowExcle)
  13. {
  14. if (dgv.Rows.Count == 0)
  15. return false;
  16. //建立Excel对象
  17. Excel.Application excel = new Excel.Application();
  18. excel.Application.Workbooks.Add(true);
  19. excel.Visible = isShowExcle;
  20. //生成字段名称
  21. for (int i = 0; i < dgv.ColumnCount; i++)
  22. {
  23. excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
  24. }
  25. //填充数据
  26. for (int i = 0; i < dgv.RowCount - 1; i++)
  27. {
  28. for (int j = 0; j < dgv.ColumnCount; j++)
  29. {
  30. if (dgv[j, i].ValueType == typeof(string))
  31. {
  32. excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();
  33. }
  34. else
  35. {
  36. excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
  37. }
  38. }
  39. }
  40. return true;
  41. }
  42. #endregion
  43. #region DateGridView导出到csv格式的Excel
  44. /// <summary>
  45. /// 常用方法,列之间加/t,一行一行输出,此文件其实是csv文件,不过默认可以当成Excel打开。
  46. /// </summary>
  47. /// <remarks>
  48. /// using System.IO;
  49. /// </remarks>
  50. /// <param name="dgv"></param>
  51. private void DataGridViewToExcel(DataGridView dgv)
  52. {
  53. SaveFileDialog dlg = new SaveFileDialog();
  54. dlg.Filter = "Execl files (*.xls)|*.xls";
  55. dlg.FilterIndex = 0;
  56. dlg.RestoreDirectory = true;
  57. dlg.CreatePrompt = true;
  58. dlg.Title = "保存为Excel文件";
  59. if (dlg.ShowDialog() == DialogResult.OK)
  60. {
  61. Stream myStream;
  62. myStream = dlg.OpenFile();
  63. StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
  64. string columnTitle = "";
  65. try
  66. {
  67. //写入列标题
  68. for (int i = 0; i < dgv.ColumnCount; i++)
  69. {
  70. if (i > 0)
  71. {
  72. columnTitle += "/t";
  73. }
  74. columnTitle += dgv.Columns[i].HeaderText;
  75. }
  76. sw.WriteLine(columnTitle);
  77. //写入列内容
  78. for (int j = 0; j < dgv.Rows.Count; j++)
  79. {
  80. string columnValue = "";
  81. for (int k = 0; k < dgv.Columns.Count; k++)
  82. {
  83. if (k > 0)
  84. {
  85. columnValue += "/t";
  86. }
  87. if (dgv.Rows[j].Cells[k].Value == null)
  88. columnValue += "";
  89. else
  90. columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();
  91. }
  92. sw.WriteLine(columnValue);
  93. }
  94. sw.Close();
  95. myStream.Close();
  96. }
  97. catch (Exception e)
  98. {
  99. MessageBox.Show(e.ToString());
  100. }
  101. finally
  102. {
  103. sw.Close();
  104. myStream.Close();
  105. }
  106. }
  107. }
  108. #endregion
  109. #region DataGridView导出到Excel,有一定的判断性
  110. /// <summary>
  111. ///方法,导出DataGridView中的数据到Excel文件
  112. /// </summary>
  113. /// <remarks>
  114. /// add com "Microsoft Excel 11.0 Object Library"
  115. /// using Excel=Microsoft.Office.Interop.Excel;
  116. /// using System.Reflection;
  117. /// </remarks>
  118. /// <param name= "dgv"> DataGridView </param>
  119. public static void DataGridViewToExcel(DataGridView dgv)
  120. {
  121. #region   验证可操作性
  122. //申明保存对话框
  123. SaveFileDialog dlg = new SaveFileDialog();
  124. //默然文件后缀
  125. dlg.DefaultExt = "xls ";
  126. //文件后缀列表
  127. dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";
  128. //默然路径是系统当前路径
  129. dlg.InitialDirectory = Directory.GetCurrentDirectory();
  130. //打开保存对话框
  131. if (dlg.ShowDialog() == DialogResult.Cancel) return;
  132. //返回文件路径
  133. string fileNameString = dlg.FileName;
  134. //验证strFileName是否为空或值无效
  135. if (fileNameString.Trim() == " ")
  136. { return; }
  137. //定义表格内数据的行数和列数
  138. int rowscount = dgv.Rows.Count;
  139. int colscount = dgv.Columns.Count;
  140. //行数必须大于0
  141. if (rowscount <= 0)
  142. {
  143. MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  144. return;
  145. }
  146. //列数必须大于0
  147. if (colscount <= 0)
  148. {
  149. MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  150. return;
  151. }
  152. //行数不可以大于65536
  153. if (rowscount > 65536)
  154. {
  155. MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  156. return;
  157. }
  158. //列数不可以大于255
  159. if (colscount > 255)
  160. {
  161. MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  162. return;
  163. }
  164. //验证以fileNameString命名的文件是否存在,如果存在删除它
  165. FileInfo file = new FileInfo(fileNameString);
  166. if (file.Exists)
  167. {
  168. try
  169. {
  170. file.Delete();
  171. }
  172. catch (Exception error)
  173. {
  174. MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  175. return;
  176. }
  177. }
  178. #endregion
  179. Excel.Application objExcel = null;
  180. Excel.Workbook objWorkbook = null;
  181. Excel.Worksheet objsheet = null;
  182. try
  183. {
  184. //申明对象
  185. objExcel = new Microsoft.Office.Interop.Excel.Application();
  186. objWorkbook = objExcel.Workbooks.Add(Missing.Value);
  187. objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;
  188. //设置EXCEL不可见
  189. objExcel.Visible = false;
  190. //向Excel中写入表格的表头
  191. int displayColumnsCount = 1;
  192. for (int i = 0; i <= dgv.ColumnCount - 1; i++)
  193. {
  194. if (dgv.Columns[i].Visible == true)
  195. {
  196. objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
  197. displayColumnsCount++;
  198. }
  199. }
  200. //设置进度条
  201. //tempProgressBar.Refresh();
  202. //tempProgressBar.Visible   =   true;
  203. //tempProgressBar.Minimum=1;
  204. //tempProgressBar.Maximum=dgv.RowCount;
  205. //tempProgressBar.Step=1;
  206. //向Excel中逐行逐列写入表格中的数据
  207. for (int row = 0; row <= dgv.RowCount - 1; row++)
  208. {
  209. //tempProgressBar.PerformStep();
  210. displayColumnsCount = 1;
  211. for (int col = 0; col < colscount; col++)
  212. {
  213. if (dgv.Columns[col].Visible == true)
  214. {
  215. try
  216. {
  217. objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
  218. displayColumnsCount++;
  219. }
  220. catch (Exception)
  221. {
  222. }
  223. }
  224. }
  225. }
  226. //隐藏进度条
  227. //tempProgressBar.Visible   =   false;
  228. //保存文件
  229. objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
  230. Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
  231. Missing.Value, Missing.Value);
  232. }
  233. catch (Exception error)
  234. {
  235. MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  236. return;
  237. }
  238. finally
  239. {
  240. //关闭Excel应用
  241. if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);
  242. if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
  243. if (objExcel != null) objExcel.Quit();
  244. objsheet = null;
  245. objWorkbook = null;
  246. objExcel = null;
  247. }
  248. MessageBox.Show(fileNameString + "/n/n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  249. }
  250. #endregion
  251. #region DataGridView数据显示到Excel
  252. /// <summary>
  253. /// 打开Excel并将DataGridView控件中数据导出到Excel
  254. /// </summary>
  255. /// <param name="dgv">DataGridView对象 </param>
  256. /// <param name="isShowExcle">是否显示Excel界面 </param>
  257. /// <remarks>
  258. /// add com "Microsoft Excel 11.0 Object Library"
  259. /// using Excel=Microsoft.Office.Interop.Excel;
  260. /// </remarks>
  261. /// <returns> </returns>
  262. public bool DataGridviewShowToExcel(DataGridView dgv, bool isShowExcle)
  263. {
  264. if (dgv.Rows.Count == 0)
  265. return false;
  266. //建立Excel对象
  267. Excel.Application excel = new Excel.Application();
  268. excel.Application.Workbooks.Add(true);
  269. excel.Visible = isShowExcle;
  270. //生成字段名称
  271. for (int i = 0; i < dgv.ColumnCount; i++)
  272. {
  273. excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
  274. }
  275. //填充数据
  276. for (int i = 0; i < dgv.RowCount - 1; i++)
  277. {
  278. for (int j = 0; j < dgv.ColumnCount; j++)
  279. {
  280. if (dgv[j, i].ValueType == typeof(string))
  281. {
  282. excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();
  283. }
  284. else
  285. {
  286. excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
  287. }
  288. }
  289. }
  290. return true;
  291. }
  292. #endregion
  293. #region DateGridView导出到csv格式的Excel
  294. /// <summary>
  295. /// 常用方法,列之间加/t,一行一行输出,此文件其实是csv文件,不过默认可以当成Excel打开。
  296. /// </summary>
  297. /// <remarks>
  298. /// using System.IO;
  299. /// </remarks>
  300. /// <param name="dgv"></param>
  301. private void DataGridViewToExcel(DataGridView dgv)
  302. {
  303. SaveFileDialog dlg = new SaveFileDialog();
  304. dlg.Filter = "Execl files (*.xls)|*.xls";
  305. dlg.FilterIndex = 0;
  306. dlg.RestoreDirectory = true;
  307. dlg.CreatePrompt = true;
  308. dlg.Title = "保存为Excel文件";
  309. if (dlg.ShowDialog() == DialogResult.OK)
  310. {
  311. Stream myStream;
  312. myStream = dlg.OpenFile();
  313. StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
  314. string columnTitle = "";
  315. try
  316. {
  317. //写入列标题
  318. for (int i = 0; i < dgv.ColumnCount; i++)
  319. {
  320. if (i > 0)
  321. {
  322. columnTitle += "/t";
  323. }
  324. columnTitle += dgv.Columns[i].HeaderText;
  325. }
  326. sw.WriteLine(columnTitle);
  327. //写入列内容
  328. for (int j = 0; j < dgv.Rows.Count; j++)
  329. {
  330. string columnValue = "";
  331. for (int k = 0; k < dgv.Columns.Count; k++)
  332. {
  333. if (k > 0)
  334. {
  335. columnValue += "/t";
  336. }
  337. if (dgv.Rows[j].Cells[k].Value == null)
  338. columnValue += "";
  339. else
  340. columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();
  341. }
  342. sw.WriteLine(columnValue);
  343. }
  344. sw.Close();
  345. myStream.Close();
  346. }
  347. catch (Exception e)
  348. {
  349. MessageBox.Show(e.ToString());
  350. }
  351. finally
  352. {
  353. sw.Close();
  354. myStream.Close();
  355. }
  356. }
  357. }
  358. #endregion
  359. #region DataGridView导出到Excel,有一定的判断性
  360. /// <summary>
  361. ///方法,导出DataGridView中的数据到Excel文件
  362. /// </summary>
  363. /// <remarks>
  364. /// add com "Microsoft Excel 11.0 Object Library"
  365. /// using Excel=Microsoft.Office.Interop.Excel;
  366. /// using System.Reflection;
  367. /// </remarks>
  368. /// <param name= "dgv"> DataGridView </param>
  369. public static void DataGridViewToExcel(DataGridView dgv)
  370. {
  371. #region   验证可操作性
  372. //申明保存对话框
  373. SaveFileDialog dlg = new SaveFileDialog();
  374. //默然文件后缀
  375. dlg.DefaultExt = "xls ";
  376. //文件后缀列表
  377. dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";
  378. //默然路径是系统当前路径
  379. dlg.InitialDirectory = Directory.GetCurrentDirectory();
  380. //打开保存对话框
  381. if (dlg.ShowDialog() == DialogResult.Cancel) return;
  382. //返回文件路径
  383. string fileNameString = dlg.FileName;
  384. //验证strFileName是否为空或值无效
  385. if (fileNameString.Trim() == " ")
  386. { return; }
  387. //定义表格内数据的行数和列数
  388. int rowscount = dgv.Rows.Count;
  389. int colscount = dgv.Columns.Count;
  390. //行数必须大于0
  391. if (rowscount <= 0)
  392. {
  393. MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  394. return;
  395. }
  396. //列数必须大于0
  397. if (colscount <= 0)
  398. {
  399. MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  400. return;
  401. }
  402. //行数不可以大于65536
  403. if (rowscount > 65536)
  404. {
  405. MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  406. return;
  407. }
  408. //列数不可以大于255
  409. if (colscount > 255)
  410. {
  411. MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  412. return;
  413. }
  414. //验证以fileNameString命名的文件是否存在,如果存在删除它
  415. FileInfo file = new FileInfo(fileNameString);
  416. if (file.Exists)
  417. {
  418. try
  419. {
  420. file.Delete();
  421. }
  422. catch (Exception error)
  423. {
  424. MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  425. return;
  426. }
  427. }
  428. #endregion
  429. Excel.Application objExcel = null;
  430. Excel.Workbook objWorkbook = null;
  431. Excel.Worksheet objsheet = null;
  432. try
  433. {
  434. //申明对象
  435. objExcel = new Microsoft.Office.Interop.Excel.Application();
  436. objWorkbook = objExcel.Workbooks.Add(Missing.Value);
  437. objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;
  438. //设置EXCEL不可见
  439. objExcel.Visible = false;
  440. //向Excel中写入表格的表头
  441. int displayColumnsCount = 1;
  442. for (int i = 0; i <= dgv.ColumnCount - 1; i++)
  443. {
  444. if (dgv.Columns[i].Visible == true)
  445. {
  446. objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
  447. displayColumnsCount++;
  448. }
  449. }
  450. //设置进度条
  451. //tempProgressBar.Refresh();
  452. //tempProgressBar.Visible   =   true;
  453. //tempProgressBar.Minimum=1;
  454. //tempProgressBar.Maximum=dgv.RowCount;
  455. //tempProgressBar.Step=1;
  456. //向Excel中逐行逐列写入表格中的数据
  457. for (int row = 0; row <= dgv.RowCount - 1; row++)
  458. {
  459. //tempProgressBar.PerformStep();
  460. displayColumnsCount = 1;
  461. for (int col = 0; col < colscount; col++)
  462. {
  463. if (dgv.Columns[col].Visible == true)
  464. {
  465. try
  466. {
  467. objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
  468. displayColumnsCount++;
  469. }
  470. catch (Exception)
  471. {
  472. }
  473. }
  474. }
  475. }
  476. //隐藏进度条
  477. //tempProgressBar.Visible   =   false;
  478. //保存文件
  479. objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
  480. Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
  481. Missing.Value, Missing.Value);
  482. }
  483. catch (Exception error)
  484. {
  485. MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  486. return;
  487. }
  488. finally
  489. {
  490. //关闭Excel应用
  491. if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);
  492. if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
  493. if (objExcel != null) objExcel.Quit();
  494. objsheet = null;
  495. objWorkbook = null;
  496. objExcel = null;
  497. }
  498. MessageBox.Show(fileNameString + "/n/n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
  499. }
  500. #endregion

DataGridView导出到Excel的三个方法的更多相关文章

  1. C# - VS2019 DataGridView导出到Excel的三种方法

    //原文出处:http://www.yongfa365.com/Item/DataGridViewToExcel.html 1 #region DataGridView数据显示到Excel /// & ...

  2. c# datagridview导出到excel【转载】

    c# datagridview导出到excel[转载] http://hi.baidu.com/weizier/blog/item/8212caea1123b4d6d439c9fe.html 本作者使 ...

  3. delphi 导出到excel的7种方法

    本文来自 爱好者8888 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kpc2000/article/details/17066823?utm_source=cop ...

  4. 【转】asp.net导出数据到Excel的三种方法

    来源:http://www.cnblogs.com/lishengpeng1982/archive/2008/04/03/1135490.html 原文出处:http://blog.csdn.net/ ...

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

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

  6. C#将DataTable数据导出到EXCEL的两种方法

    1.在非服务器控件的页面导出数据,需要借助一张temp空页面post回后台的数据. 前台:window.location.href = "../Temp.aspx"; 后台: tr ...

  7. DataGridView 导出到Excel

    #region 导出四个表格到Excel /// <summary> /// 导出四个表格到Excel /// </summary> /// <param name=&q ...

  8. C# DataGridView显示行号的三种方法

    方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dgGrid_RowPostPaint( obj ...

  9. winform DataGridView 导出到Excel表格 分类: WinForm 2014-07-04 10:48 177人阅读 评论(0) 收藏

    public bool ExportDataGridview(DataGridView gridView)         {             if (gridView.Rows.Count ...

随机推荐

  1. POJ 2251 BFS(简单)

    一道三维的BFS Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24003 Accepted: 9 ...

  2. 【Cocos2d-x 3.x】 动作类Action源码分析

    游戏设计中,动作是不可缺少的,Cocos2d-x中所有的动作都继承自Action类,而Action类继承自Ref和Clonable类,整个动作类继承体系如图: FiniteTimeAction是所有瞬 ...

  3. 我关注的一些关于前端的文章(copy)

    本文的核心是侧重于HTML/CSS的框架,JS框架或以JS为核心的框架不讨论(比如YUI):多屏已是既定事实,虽然不是所有开发都要考虑自适应,但有自适应功能至少说明了这框架短期内不会被淘汰,所以不带自 ...

  4. toUnsignedString详解

    /** * All possible chars for representing a number as a String */ final static char[] digits = { '0' ...

  5. 未能加载文件或程序集“AspNetPager”或它的某一个依赖项。参数错误(转)

    未能加载文件或程序集“AspNetPager”或它的某一个依赖项.参数错误. 看你的的开发框架用的是多少的2.0, 3.0, 3.5, 4.0 那么删除的框架的文件夹也相对应的变化   删除 C:\W ...

  6. 处理 Oracle SQL in 超过1000 的解决方案

    处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超过1000项就会报错.这主要是oracle考虑性能问题做的限制.如果要解 ...

  7. 当窗体获得焦点时禁用max快捷键

    最近一段时间一直在MXS里用dotnet写界面...写的各种头晕眼花... 过程中遇到了 TextBox 控件输入时 与max快捷键冲突的问题. 解决办法是 用 MaxTextBox 控件替换,今天请 ...

  8. 2016_09_21 Russia is seriously running out of cash_CNN

    After almost two years in recession,the country's rainy day fund has shrunk to just $32.2 billlion t ...

  9. js 循环切换图片

    function changeLot(){ var minIndex = 1; var maxIndex = 100; var curIndex = 10; var src = $("ul ...

  10. 不同编程语言打印“元旦快乐!"

    javascript: document.write("元旦快乐!"+"<br/>"); PHP: <?php echo "元旦快乐 ...