• NPOI导出Excel表功能实现(多个工作簿)(备用)


    Excel生成操作类:

      1 代码 
      2 using System;
      3 using System.Collections.Generic;
      4 using System.Text;
      5 using System.IO;
      6 using NPOI;
      7 using NPOI.HPSF;
      8 using NPOI.HSSF;
      9 using NPOI.HSSF.UserModel;
     10 using System.Data;
     11 
     12 namespace StarTech.NPOI
     13 {
     14     /// <summary>
     15     /// Excel生成操作类
     16     /// </summary>
     17     public class NPOIHelper
     18     {
     19         /// <summary>
     20         /// 导出列名
     21         /// </summary>
     22         public static System.Collections.SortedList ListColumnsName;
     23         /// <summary>
     24         /// 导出Excel
     25         /// </summary>
     26         /// <param name="dgv"></param>
     27         /// <param name="filePath"></param>
     28         public static void ExportExcel(DataTable dtSource, string filePath)
     29         {
     30             if (ListColumnsName == null || ListColumnsName.Count == 0)
     31                 throw (new Exception("请对ListColumnsName设置要导出的列明!"));
     32 
     33             HSSFWorkbook excelWorkbook = CreateExcelFile();
     34             InsertRow(dtSource, excelWorkbook);
     35             SaveExcelFile(excelWorkbook, filePath);
     36         }
     37         /// <summary>
     38         /// 导出Excel
     39         /// </summary>
     40         /// <param name="dgv"></param>
     41         /// <param name="filePath"></param>
     42         public static void ExportExcel(DataTable dtSource, Stream excelStream)
     43         {
     44             if (ListColumnsName == null || ListColumnsName.Count == 0)
     45                 throw (new Exception("请对ListColumnsName设置要导出的列明!"));
     46 
     47             HSSFWorkbook excelWorkbook = CreateExcelFile();
     48             InsertRow(dtSource, excelWorkbook);
     49             SaveExcelFile(excelWorkbook, excelStream);
     50         }
     51         /// <summary>
     52         /// 保存Excel文件
     53         /// </summary>
     54         /// <param name="excelWorkBook"></param>
     55         /// <param name="filePath"></param>
     56         protected static void SaveExcelFile(HSSFWorkbook excelWorkBook, string filePath)
     57         {
     58             FileStream file = null;
     59             try
     60             {
     61                 file = new FileStream(filePath, FileMode.Create);
     62                 excelWorkBook.Write(file);
     63             }
     64             finally
     65             {
     66                 if (file != null)
     67                 {
     68                     file.Close();
     69                 }
     70             }
     71         }
     72         /// <summary>
     73         /// 保存Excel文件
     74         /// </summary>
     75         /// <param name="excelWorkBook"></param>
     76         /// <param name="filePath"></param>
     77         protected static void SaveExcelFile(HSSFWorkbook excelWorkBook, Stream excelStream)
     78         {
     79             try
     80             {
     81                 excelWorkBook.Write(excelStream);
     82             }
     83             finally
     84             {
     85 
     86             }
     87         }
     88         /// <summary>
     89         /// 创建Excel文件
     90         /// </summary>
     91         /// <param name="filePath"></param>
     92         protected static HSSFWorkbook CreateExcelFile()
     93         {
     94             HSSFWorkbook hssfworkbook = new HSSFWorkbook();
     95             return hssfworkbook;
     96         }
     97         /// <summary>
     98         /// 创建excel表头
     99         /// </summary>
    100         /// <param name="dgv"></param>
    101         /// <param name="excelSheet"></param>
    102         protected static void CreateHeader(HSSFSheet excelSheet)
    103         {
    104             int cellIndex = 0;
    105             //循环导出列
    106             foreach (System.Collections.DictionaryEntry de in ListColumnsName)
    107             {
    108                 HSSFRow newRow = excelSheet.CreateRow(0);
    109                 HSSFCell newCell = newRow.CreateCell(cellIndex);
    110                 newCell.SetCellValue(de.Value.ToString());
    111                 cellIndex++;
    112             }
    113         }
    114         /// <summary>
    115         /// 插入数据行
    116         /// </summary>
    117         protected static void InsertRow(DataTable dtSource, HSSFWorkbook excelWorkbook)
    118         {
    119             int rowCount = 0;
    120             int sheetCount = 1;
    121             HSSFSheet newsheet = null;
    122 
    123             //循环数据源导出数据集
    124             newsheet = excelWorkbook.CreateSheet("Sheet" + sheetCount);
    125             CreateHeader(newsheet);
    126             foreach (DataRow dr in dtSource.Rows)
    127             {
    128                 rowCount++;
    129                 //超出10000条数据 创建新的工作簿
    130                 if (rowCount == 10000)
    131                 {
    132                     rowCount = 1;
    133                     sheetCount++;
    134                     newsheet = excelWorkbook.CreateSheet("Sheet" + sheetCount);
    135                     CreateHeader(newsheet);
    136                 }
    137 
    138                 HSSFRow newRow = newsheet.CreateRow(rowCount);
    139                 InsertCell(dtSource, dr, newRow, newsheet, excelWorkbook);
    140             }
    141         }
    142         /// <summary>
    143         /// 导出数据行
    144         /// </summary>
    145         /// <param name="dtSource"></param>
    146         /// <param name="drSource"></param>
    147         /// <param name="currentExcelRow"></param>
    148         /// <param name="excelSheet"></param>
    149         /// <param name="excelWorkBook"></param>
    150         protected static void InsertCell(DataTable dtSource, DataRow drSource, HSSFRow currentExcelRow, HSSFSheet excelSheet, HSSFWorkbook excelWorkBook)
    151         {
    152             for (int cellIndex = 0; cellIndex < ListColumnsName.Count; cellIndex++)
    153             {
    154                 //列名称
    155                 string columnsName = ListColumnsName.GetKey(cellIndex).ToString();
    156                 HSSFCell newCell = null;
    157                 System.Type rowType = drSource[columnsName].GetType();
    158                 string drValue = drSource[columnsName].ToString().Trim();
    159                 switch (rowType.ToString())
    160                 {
    161                     case "System.String"://字符串类型
    162                         drValue = drValue.Replace("&", "&");
    163                         drValue = drValue.Replace(">", ">");
    164                         drValue = drValue.Replace("<", "<");
    165                         newCell = currentExcelRow.CreateCell(cellIndex);
    166                         newCell.SetCellValue(drValue);
    167                         break;
    168                     case "System.DateTime"://日期类型
    169                         DateTime dateV;
    170                         DateTime.TryParse(drValue, out dateV);
    171                         newCell = currentExcelRow.CreateCell(cellIndex);
    172                         newCell.SetCellValue(dateV);
    173 
    174                         //格式化显示
    175                         HSSFCellStyle cellStyle = excelWorkBook.CreateCellStyle();
    176                         HSSFDataFormat format = excelWorkBook.CreateDataFormat();
    177                         cellStyle.DataFormat = format.GetFormat("yyyy-mm-dd hh:mm:ss");
    178                         newCell.CellStyle = cellStyle;
    179 
    180                         break;
    181                     case "System.Boolean"://布尔型
    182                         bool boolV = false;
    183                         bool.TryParse(drValue, out boolV);
    184                         newCell = currentExcelRow.CreateCell(cellIndex);
    185                         newCell.SetCellValue(boolV);
    186                         break;
    187                     case "System.Int16"://整型
    188                     case "System.Int32":
    189                     case "System.Int64":
    190                     case "System.Byte":
    191                         int intV = 0;
    192                         int.TryParse(drValue, out intV);
    193                         newCell = currentExcelRow.CreateCell(cellIndex);
    194                         newCell.SetCellValue(intV.ToString());
    195                         break;
    196                     case "System.Decimal"://浮点型
    197                     case "System.Double":
    198                         double doubV = 0;
    199                         double.TryParse(drValue, out doubV);
    200                         newCell = currentExcelRow.CreateCell(cellIndex);
    201                         newCell.SetCellValue(doubV);
    202                         break;
    203                     case "System.DBNull"://空值处理
    204                         newCell = currentExcelRow.CreateCell(cellIndex);
    205                         newCell.SetCellValue("");
    206                         break;
    207                     default:
    208                         throw (new Exception(rowType.ToString() + ":类型数据无法处理!"));
    209                 }
    210             }
    211         }
    212     }
    213     //排序实现接口 不进行排序 根据添加顺序导出
    214     public class NoSort : System.Collections.IComparer
    215     {
    216         public int Compare(object x, object y)
    217         {
    218             return -1;
    219         }
    220     }
    221 }
    Excel生成类

    调用方法: 

     1 代码 
     2  //导出数据列 实现根据添加顺序导出列
     3         StarTech.NPOI.NPOIHelper.ListColumnsName = new SortedList(new StarTech.NPOI.NoSort());
     4         StarTech.NPOI.NPOIHelper.ListColumnsName.Add("MemberName", "姓名");
     5         StarTech.NPOI.NPOIHelper.ListColumnsName.Add("username", "账号");
     6         StarTech.NPOI.NPOIHelper.ListColumnsName.Add("starttime", "登陆时间");
     7         StarTech.NPOI.NPOIHelper.ListColumnsName.Add("lasttime", "在线到期时间");
     8         StarTech.NPOI.NPOIHelper.ListColumnsName.Add("state", "状态");
     9         Response.Clear();
    10         Response.BufferOutput = false;
    11         Response.ContentEncoding = System.Text.Encoding.UTF8;
    12         string filename = HttpUtility.UrlEncode(DateTime.Now.ToString("在线用户yyyyMMdd"));
    13         Response.AddHeader("Content-Disposition", "attachment;filename=" + filename + ".xls");
    14         Response.ContentType = "application/ms-excel";
    15         StarTech.NPOI.NPOIHelper.ExportExcel(dtSource, Response.OutputStream);
    16         Response.Close();
    调用Helper
    屌丝一直很屌
  • 相关阅读:
    C语言头文件stdarg.h(cstdarg)
    C语言头文件ctype.h(cctype)
    内存数库库种类
    C#设计模式单件模式(Singleton Pattern)
    vs2005快捷键,vs2008通用
    移动MYSQL数据库经常遇到乱码的问题
    ie6 ie7 ie8 共存以及Firefox浏览器CSS兼容写法
    用正则表达式替换a标记href值
    IE6 PNG透明终极解决方案(打造W3CfunsIE6PNG最强帖)
    IE的hack
  • 原文地址:https://www.cnblogs.com/xiashenbin/p/3414097.html
Copyright © 2020-2023  润新知