1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.HtmlControls;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.IO;
  11. using System.Text;
  12. using NPOI;
  13. using NPOI.HPSF;
  14. using NPOI.HSSF;
  15. using NPOI.HSSF.UserModel;
  16. using NPOI.HSSF.Util;
  17. using NPOI.POIFS;
  18. using NPOI.Util;  
  19. namespace PMS.Common
  20. {
  21.     public class NPOIHelper
  22.     {
  23.         /// <summary>
  24.         /// DataTable导出到Excel文件
  25.         /// </summary>
  26.         /// <param name="dtSource">源DataTable</param>
  27.         /// <param name="strHeaderText">表头文本</param>
  28.         /// <param name="strFileName">保存位置</param>
  29.         public static void Export(DataTable dtSource, string strHeaderText, string strFileName)
  30.         {
  31.             using (MemoryStream ms = Export(dtSource, strHeaderText))
  32.             {
  33.                 using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
  34.                 {
  35.                     byte[] data = ms.ToArray();
  36.                     fs.Write(data, , data.Length);
  37.                     fs.Flush();
  38.                 }
  39.             }
  40.         }
  41.         /// <summary>
  42.         /// DataTable导出到Excel的MemoryStream
  43.         /// </summary>
  44.         /// <param name="dtSource">源DataTable</param>
  45.         /// <param name="strHeaderText">表头文本</param>
  46.         public static MemoryStream Export(DataTable dtSource, string strHeaderText)
  47.         {
  48.             HSSFWorkbook workbook = new HSSFWorkbook();
  49.             HSSFSheet sheet = workbook.CreateSheet();
  50.             #region 右击文件 属性信息
  51.             {
  52.                 DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
  53.                 dsi.Company = "NPOI";
  54.                 workbook.DocumentSummaryInformation = dsi;
  55.                 SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
  56.                 si.Author = "文件作者信息"; //填加xls文件作者信息
  57.                 si.ApplicationName = "创建程序信息"; //填加xls文件创建程序信息
  58.                 si.LastAuthor = "最后保存者信息"; //填加xls文件最后保存者信息
  59.                 si.Comments = "作者信息"; //填加xls文件作者信息
  60.                 si.Title = "标题信息"; //填加xls文件标题信息
  61.                 si.Subject = "主题信息";//填加文件主题信息
  62.                 si.CreateDateTime = DateTime.Now;
  63.                 workbook.SummaryInformation = si;
  64.             }
  65.             #endregion
  66.             HSSFCellStyle dateStyle = workbook.CreateCellStyle();
  67.             HSSFDataFormat format = workbook.CreateDataFormat();
  68.             dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
  69.             //取得列宽
  70.             int[] arrColWidth = new int[dtSource.Columns.Count];
  71.             foreach (DataColumn item in dtSource.Columns)
  72.             {
  73.                 arrColWidth[item.Ordinal] = Encoding.GetEncoding().GetBytes(item.ColumnName.ToString()).Length;
  74.             }
  75.             ; i < dtSource.Rows.Count; i++)
  76.             {
  77.                 ; j < dtSource.Columns.Count; j++)
  78.                 {
  79.                     ).GetBytes(dtSource.Rows[i][j].ToString()).Length;
  80.                     if (intTemp > arrColWidth[j])
  81.                     {
  82.                         arrColWidth[j] = intTemp;
  83.                     }
  84.                 }
  85.             } 
  86.             ; 
  87.             foreach (DataRow row in dtSource.Rows)
  88.             {
  89.                 #region 新建表,填充表头,填充列头,样式
  90.                  || rowIndex == )
  91.                 {
  92.                     )
  93.                     {
  94.                         sheet = workbook.CreateSheet();
  95.                     }
  96.                     #region 表头及样式
  97.                     {
  98.                         HSSFRow headerRow = sheet.CreateRow();
  99.                         headerRow.HeightInPoints = ;
  100.                         headerRow.CreateCell().SetCellValue(strHeaderText);
  101.                         HSSFCellStyle headStyle = workbook.CreateCellStyle();
  102.                         headStyle.Alignment = CellHorizontalAlignment.CENTER;
  103.                         HSSFFont font = workbook.CreateFont();
  104.                         font.FontHeightInPoints = ;
  105.                         font.Boldweight = ;
  106.                         headStyle.SetFont(font);
  107.                         headerRow.GetCell().CellStyle = headStyle;
  108.                         sheet.AddMergedRegion(, , , dtSource.Columns.Count - ));
  109.                         headerRow.Dispose();
  110.                     }
  111.                     #endregion
  112.  
  113.                     #region 列头及样式
  114.                     {
  115.                         HSSFRow headerRow = sheet.CreateRow(); 
  116.                         HSSFCellStyle headStyle = workbook.CreateCellStyle();
  117.                         headStyle.Alignment = CellHorizontalAlignment.CENTER;
  118.                         HSSFFont font = workbook.CreateFont();
  119.                         font.FontHeightInPoints = ;
  120.                         font.Boldweight = ;
  121.                         headStyle.SetFont(font); 
  122.                         foreach (DataColumn column in dtSource.Columns)
  123.                         {
  124.                             headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
  125.                             headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
  126.                             //设置列宽
  127.                             sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + ) * ); 
  128.                         }
  129.                         headerRow.Dispose();
  130.                     }
  131.                     #endregion
  132.                     rowIndex = ;
  133.                 }
  134.                 #endregion
  135.  
  136.                 #region 填充内容
  137.                 HSSFRow dataRow = sheet.CreateRow(rowIndex);
  138.                 foreach (DataColumn column in dtSource.Columns)
  139.                 {
  140.                     HSSFCell newCell = dataRow.CreateCell(column.Ordinal);
  141.                     string drValue = row[column].ToString();
  142.                     switch (column.DataType.ToString())
  143.                     {
  144.                         case "System.String"://字符串类型
  145.                             newCell.SetCellValue(drValue);
  146.                             break;
  147.                         case "System.DateTime"://日期类型
  148.                             DateTime dateV;
  149.                             DateTime.TryParse(drValue, out dateV);
  150.                             newCell.SetCellValue(dateV);
  151.                             newCell.CellStyle = dateStyle;//格式化显示
  152.                             break;
  153.                         case "System.Boolean"://布尔型
  154.                             bool boolV = false;
  155.                             bool.TryParse(drValue, out boolV);
  156.                             newCell.SetCellValue(boolV);
  157.                             break;
  158.                         case "System.Int16"://整型
  159.                         case "System.Int32":
  160.                         case "System.Int64":
  161.                         case "System.Byte":
  162.                             ;
  163.                             int.TryParse(drValue, out intV);
  164.                             newCell.SetCellValue(intV);
  165.                             break;
  166.                         case "System.Decimal"://浮点型
  167.                         case "System.Double":
  168.                             ;
  169.                             double.TryParse(drValue, out doubV);
  170.                             newCell.SetCellValue(doubV);
  171.                             break;
  172.                         case "System.DBNull"://空值处理
  173.                             newCell.SetCellValue("");
  174.                             break;
  175.                         default:
  176.                             newCell.SetCellValue("");
  177.                             break;
  178.                     }
  179.                 }
  180.                 #endregion
  181.                 rowIndex++;
  182.             } 
  183.             using (MemoryStream ms = new MemoryStream())
  184.             {
  185.                 workbook.Write(ms);
  186.                 ms.Flush();
  187.                 ms.Position = ;
  188.                 sheet.Dispose();
  189.                 //workbook.Dispose();//一般只用写这一个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet
  190.                 return ms;
  191.             } 
  192.         }
  193.         /// <summary>
  194.         /// 用于Web导出
  195.         /// </summary>
  196.         /// <param name="dtSource">源DataTable</param>
  197.         /// <param name="strHeaderText">表头文本</param>
  198.         /// <param name="strFileName">文件名</param>
  199.         public static void ExportByWeb(DataTable dtSource, string strHeaderText, string strFileName)
  200.         { 
  201.             HttpContext curContext = HttpContext.Current;
  202.             // 设置编码和附件格式
  203.             curContext.Response.ContentType = "application/vnd.ms-excel";
  204.             curContext.Response.ContentEncoding = Encoding.UTF8;
  205.             curContext.Response.Charset = "";
  206.             curContext.Response.AppendHeader("Content-Disposition",
  207.                 "attachment;filename=" + HttpUtility.UrlEncode(strFileName, Encoding.UTF8));
  208.             curContext.Response.BinaryWrite(Export(dtSource, strHeaderText).GetBuffer());
  209.             curContext.Response.End(); 
  210.         }
  211.         /// <summary>读取excel
  212.         /// 默认第一行为标头
  213.         /// </summary>
  214.         /// <param name="strFileName">excel文档路径</param>
  215.         /// <returns></returns>
  216.         public static DataTable Import(string strFileName)
  217.         {
  218.             DataTable dt = new DataTable();
  219.             HSSFWorkbook hssfworkbook;
  220.             using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
  221.             {
  222.                 hssfworkbook = new HSSFWorkbook(file);
  223.             }
  224.             HSSFSheet sheet = hssfworkbook.GetSheetAt();
  225.             System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
  226.             HSSFRow headerRow = sheet.GetRow();
  227.             int cellCount = headerRow.LastCellNum;
  228.             ; j < cellCount; j++)
  229.             {
  230.                 HSSFCell cell = headerRow.GetCell(j);
  231.                 dt.Columns.Add(cell.ToString());
  232.             }
  233.             ); i <= sheet.LastRowNum; i++)
  234.             {
  235.                 HSSFRow row = sheet.GetRow(i);
  236.                 DataRow dataRow = dt.NewRow();
  237.                 for (int j = row.FirstCellNum; j < cellCount; j++)
  238.                 {
  239.                     if (row.GetCell(j) != null)
  240.                         dataRow[j] = row.GetCell(j).ToString();
  241.                 }
  242.                 dt.Rows.Add(dataRow);
  243.             }
  244.             return dt;
  245.         }
  246.     }
  247. }

NPOI操作类的更多相关文章

  1. 【个人使用.Net类库】(3)Excel文件操作类(基于NPOI)

    Web开发工作中经常要根据业务的需要生成对应的报表.经常采用的方法如下: 将DataTable导出至Excel文件; 读取模板Excel文件; 修改模板Excel文件对应的内容. 因此,便想到封装一个 ...

  2. NPOI操作EXCEL(四)——反射机制批量导出excel文件

    前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...

  3. 数据字典生成工具之旅(4):NPOI操作EXECL

    这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...

  4. [Solution] NPOI操作Excel

    NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...

  5. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

  6. .NET 通过 NPOI 操作 Excel

    目录 .NET 通过 NPOI 操作 Excel 第一步:通过 NuGet 获取 NPOI 包并引入程序集 第二步:引入 NPOI 帮助类 第三步:在程序中调用相应的方法对数据进行导出导入操作 将 D ...

  7. NPOI 帮助类

    NPOI 帮助类 代码实现了来自于互联网 using System; using System.Data; using System.IO; using System.Text; using NPOI ...

  8. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  9. JQuery操作类数组的工具方法

    JQuery学习之操作类数组的工具方法 在很多时候,JQuery的$()函数都返回一个类似数据的JQuery对象,例如$('div')将返回div里面的所有div元素包装的JQuery对象.在这中情况 ...

随机推荐

  1. 【2-24】for循环嵌套,跳转语句,异常语句,穷举法、迭代法

    For循环嵌套与if嵌套相似,是在for中再套for,其结构如下: For(;;) { For(;;){} }经典题型为打印星星例: Console.Write("请输入一个奇数:" ...

  2. 从零开始部署小型企业级虚拟桌面 -- Vmware Horizon View 6 For Linux VDI -- 概念简介

    什么是桌面虚拟化? 桌面虚拟化有很多概念,此处谈论的,是指的一般企业使用的“服务器 + 虚拟机 + 云终端”的方式来实现的. 桌面虚拟化的原理是什么? 桌面虚拟化看上去高大上,实际上原理非常的简单.拿 ...

  3. Rabbitmq集群高可用部署详细

    序言 清风万里的季节,周末本该和亲人朋友一起消遣这烂漫的花花草草,或是懒洋洋的晒个太阳听听风声鸟鸣.无奈工作使然,理想使然,我回到啦公司,敲起啦键盘,撸起啦代码,程序狗的世界一片黯然,一片黯然,愿天下 ...

  4. 【Unity编程】欧拉角与万向节死锁(图文版)

    版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 万向节死锁(Gimbal Lock)问题 上文中曾经说过,欧拉旋转的顺规和轴向定义 ...

  5. 自定义 Layout布局 UICollectionViewLayout

    from:   http://www.tuicool.com/articles/vuyIriN 当我们使用系统自带的UICollectionViewFlowLayout无法实现我们的布局时,我们就可以 ...

  6. HTML5学习笔记<二>:元素,属性,格式化

    HTML元素 元素是指从开始标签到结束标签的所有代码. 开始(开放)标签 元素内容 结束(闭合)标签 <p> this is my web page </p> 没有内容的 HT ...

  7. APIJSON-以坚持和偏执,回敬傲慢和偏见

    APIJSON简介: APIJSON是一种JSON传输结构协议. 客户端可以定义任何JSON结构去向服务端发起请求,服务端就会返回对应结构的JSON字符串,所求即所得. 一次请求任意结构任意数据,方便 ...

  8. python的tkinter版本不匹配问题:RuntimeError: test:tk.h version (8.4) doesn't match libtk.a version (8.5)

    Traceback (most recent call last): File "/root/CodeWorkPace/test/TCPClient.py", line 20, i ...

  9. Node.js开发工具、开发包、框架等总结

    开发工具 1.WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢.2.做些小型项目用Sublime Text.3.Browserif ...

  10. node.js 模板 ejs 转

    node.js 模板引ejs. 搜了一把推荐用ejs的最多. 速度比对:http://www.cnblogs.com/fengmk2/archive/2011/04/28/2031971.html e ...