1、添加引用

2、封装方法

  1. using System;
  2. using System.Data;
  3. using System.IO;
  4. using NPOI.HSSF.UserModel;
  5. using NPOI.SS.UserModel;
  6.  
  7. namespace Demo
  8. {
  9. /// <summary>
  10. /// Excel操作类
  11. /// </summary>
  12. public class Excel
  13. {
  14. private readonly HSSFWorkbook workbook = null;
  15. private readonly DataSet dataSet = null;
  16. private readonly string excelFilename = string.Empty;
  17.  
  18. private readonly ICellStyle cellDateTimeStyle = null;
  19.  
  20. /// <summary>
  21. /// Excel操作类构造函数
  22. /// </summary>
  23. /// <param name="dataSet"></param>
  24. /// <param name="excelFilename"></param>
  25. public Excel(DataSet dataSet, string excelFilename)
  26. {
  27. this.dataSet = dataSet;
  28. this.excelFilename = excelFilename;
  29. workbook = new HSSFWorkbook();
  30.  
  31. IDataFormat iDataFormat = workbook.CreateDataFormat();
  32. //设置一个DateTime单元格的样式
  33. cellDateTimeStyle = workbook.CreateCellStyle();
  34. cellDateTimeStyle.DataFormat = iDataFormat.GetFormat("yyyy-m-d h:mm:ss");
  35. }
  36.  
  37. /// <summary>
  38. /// 生成excel
  39. /// </summary>
  40. /// <returns></returns>
  41. public bool Write()
  42. {
  43. bool returns = false;
  44. using (FileStream saveFile = new FileStream(excelFilename, FileMode.Create, FileAccess.ReadWrite))
  45. {
  46. WriteExcelFile(dataSet);
  47. workbook.Write(saveFile);
  48. returns = true;
  49. }
  50. return returns;
  51. }
  52.  
  53. private void WriteExcelFile(DataSet ds)
  54. {
  55. foreach (DataTable dt in ds.Tables)
  56. {
  57. ISheet sheet = workbook.CreateSheet(dt.TableName);
  58. WriteDataTableToExcelWorksheet(dt, sheet);
  59. }
  60. }
  61.  
  62. private void WriteDataTableToExcelWorksheet(DataTable dt, ISheet sheet)
  63. {
  64. //生成sheet第一行列名
  65. IRow row = sheet.CreateRow();
  66. for (int i = ; i < dt.Columns.Count; i++)
  67. {
  68. ICell cell = row.CreateCell(i);
  69. cell.SetCellValue(dt.Columns[i].Caption);
  70. }
  71. //写入数据
  72. for (int i = ; i < dt.Rows.Count; i++)
  73. {
  74. IRow rows = sheet.CreateRow(i + );
  75. for (int j = ; j < dt.Columns.Count; j++)
  76. {
  77. ICell cell = rows.CreateCell(j);
  78. var cellValue = dt.Rows[i][j];
  79. if (cellValue == DBNull.Value)
  80. {
  81. continue;
  82. }
  83. //类型判断处理
  84. var type = cellValue.GetType();
  85. var typeName = type.Name.ToLower();
  86. switch (typeName)
  87. {
  88. case "int32":
  89. cell.SetCellValue(double.Parse(cellValue.ToString()));
  90. break;
  91. case "string":
  92. cell.SetCellValue(cellValue.ToString());
  93. break;
  94. case "datetime":
  95. cell.CellStyle = cellDateTimeStyle;
  96. cell.SetCellValue(DateTime.Parse(cellValue.ToString()));
  97. break;
  98. case "guid":
  99. cell.SetCellValue(cellValue.ToString());
  100. break;
  101. case "boolean":
  102. cell.SetCellValue(bool.Parse(cellValue.ToString()));
  103. break;
  104. default:
  105. throw new Exception(string.Format("类型:{0}未做处理,请自行添加", typeName));
  106. }
  107. }
  108. }
  109. }
  110. }
  111. }

3、实际应用

  1. using System;
  2. using System.Data;
  3.  
  4. namespace Demo
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. DataSet dataSet = new DataSet();
  11. DataTable dataTable = new DataTable();
  12. dataTable.TableName = "Demo";
  13. dataTable.Columns.Add("Id", typeof(int));
  14. dataTable.Columns.Add("名称", typeof(string));
  15. dataTable.Columns.Add("年龄", typeof(int));
  16. dataTable.Columns.Add("添加日期", typeof(DateTime));
  17.  
  18. for (int i = ; i < ; i++)
  19. {
  20. dataTable.Rows.Add(i, "名称demo" + i, , DateTime.Now);
  21. }
  22. dataSet.Tables.Add(dataTable);
  23.  
  24. Excel excel = new Excel(dataSet, "Demo.xls");
  25. excel.Write();
  26. }
  27. }
  28. }

【C#-导出Excel】DataSet导出Excel的更多相关文章

  1. NPOI DataSet导出excel

    /// <summary> /// DataSet导出到Excel的MemoryStream /// </summary> /// <param name="d ...

  2. C# DataSet导出Excel

    //多个DataSet导出Excel文件 public static void DataSetToExcel(DataSet p_ds,string strSavePath) { ;//多个DataS ...

  3. 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)

    DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...

  4. DataSet导出到Excel,并生成文件(C#实现,可合并行和列)

    using System; using System.IO; using System.Data; using System.Reflection; using System.Diagnostics; ...

  5. 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  6. C# 之 EXCEL导入导出

    以下方式是本人总结的一些经验,肯定有很多种方法,在此先记下,留待以后补充... 希望朋友们一起来探讨相关想法,请在下方留言. A-1:EXCEL模板导出 非常简单,将EXCEL模板上传到项目中后,将其 ...

  7. Excel 导入 导出 Microsoft

    导出: private void exportExcel() { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { Application. ...

  8. C#实现Excel模板导出和从Excel导入数据

    午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...

  9. 如何使用NPOI 导出到excel和导入excel到数据库

    近期一直在做如何将数据库的数据导出到excel和导入excel到数据库. 首先进入官网进行下载NPOI插件(http://npoi.codeplex.com/). 我用的NPOI1.2.5稳定版. 使 ...

随机推荐

  1. Plsql配置后,sql语句可以简写 快速使用

    in=INSERT up=UPDATE se=SELECT fr=FROM wh=WHERE or=ORDER BY de=DELETE df=DELETE FROM sf=SELECT * FROM ...

  2. URI解析

    这里主要参考 RFC3986 文档. URI可以分为URL,URN或同时具备locators 和names特性的一个东西.URN作用就好像一个人的名字,URL就像一个人的地址.换句话说:URN确定了东 ...

  3. Ruby Rails学习中:Sass 和 Asset Pipeline,布局中的链接(Rails路由,具名路由),用户注册: 第一步

    接上篇: 一.Sass 和 Asset Pipeline Rails 中最有用的功能之一是 Asset Pipeline, 它极大地简化了静态资源文件(CSS.JavaScript 和图像)的生成和管 ...

  4. mysql-tpcc测试

    os: centos 7.4 db: mysql 5.7 software: tpcc-mysql TPC-C是专门针对联机交易处理系统(OLTP系统)的规范. tpcc-mysql是percona基 ...

  5. C3.js入门案例

    C3.js是基于D3.js开发的JavaScript库,它可以让开发者构建出可复用的图表,并且还提供了一系列图表上的交互行为.通过C3,只需要往generate函数中传入数据对象就可以轻松的绘制出图表 ...

  6. RAII惯用法:C++资源管理的利器(转)

    RAII惯用法:C++资源管理的利器 RAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写.中文可将其翻 ...

  7. ES6新增内容总结

    ES6新增内容有:1,模块化思想.2,关于变量let和const.3,解构赋值.4,字符串的扩展.5,函数的扩展.6,箭头函数.7,继承apply的用法 以下就是详解: 1:模块化思想 非模块化有命名 ...

  8. Shell脚本——for,while,until循环

    1.for循环: 语句格式: for i in 循环判断 do 循环体 done 举例:九九乘法表(for循环版本) #!/bin/bash # Author: Sean Martin # Blog: ...

  9. Delphi TIdUDPServer组件

  10. Linux学习--第九天--du、df、fsck、dumpe2fs、mount、NTFS-3G、fdisk、partprobe、/etc/fstab、free、mkswap、swapon

    分区类型 主分区:最多只能分四个 扩展分区:只能有一个,如果有了扩展分区,主分区只能有三个.扩展分区不能格式化和存储数据,再划分为逻辑分区才能进行相应操作. 逻辑分区:IDE硬盘,linux最多支持5 ...