• C# 在MVC 中把DataTable中的数据导出到Excel


      1 // 类库
      2 // NPOI.dll
      3 // NPOI.OOXML.dll
      4 // NPOI.OpenXml4Net.dll
      5 // NPOI.OpenXmlFormats.dll
      6 
      7 using NPOI.XSSF.UserModel;
      8 using NPOI.SS.UserModel;
      9 
     10 
     11 
     12 public class ExcelHelper
     13     {
     14         public static Stream ExportData(System.Data.DataTable dt)
     15         {
     16             if (dt == null)
     17             {
     18                 throw new ArgumentNullException();
     19             }
     20             if (dt.Rows.Count > 5000)
     21                 dt=dt.Select().Take(5000).CopyToDataTable();
     22 
     23             XSSFWorkbook book = new XSSFWorkbook();
     24             
     25             ISheet sheet = book.CreateSheet("sheet1");
     26             int rowCount = dt.Rows.Count;
     27             int cellCount = dt.Columns.Count;
     28 
     29             var titleRow = sheet.CreateRow(0);
     30             #region header style
     31             titleRow.HeightInPoints = 18;
     32             ICellStyle headStyle = book.CreateCellStyle();
     33             headStyle.Alignment = HorizontalAlignment.Center;
     34             IFont font = book.CreateFont();
     35             font.FontHeightInPoints = 12;
     36             font.Boldweight = 1200;
     37             font.Color = NPOI.HSSF.Util.HSSFColor.Green.Index;
     38             headStyle.SetFont(font);
     39 
     40             headStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
     41             headStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
     42             headStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
     43             headStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
     44 
     45             #endregion
     46 
     47             for (int i = 0; i < dt.Columns.Count; i++)
     48             {
     49                 ICell cell = titleRow.CreateCell(i);
     50                 cell.SetCellValue(dt.Columns[i].ColumnName);
     51                 cell.CellStyle = headStyle;
     52             }
     53 
     54             for (int i = 0; i < dt.Rows.Count; i++)
     55             {
     56                 IRow row = sheet.CreateRow(i + 1);
     57                 for (int j = 0; j < cellCount; j++)
     58                 {
     59                     string formattedString;
     60                     if (dt.Columns[j].DataType.Name == "String")
     61                     {
     62                         Encoding ascii = Encoding.ASCII;
     63                         Encoding unicode = Encoding.Unicode;
     64                         // Convert the string into a byte array.
     65                         byte[] unicodeBytes = unicode.GetBytes(dt.Rows[i][j].ToString());
     66                         // Perform the conversion from one encoding to the other.
     67                         byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
     68                         // Convert the new byte[] into a char[] and then into a string.
     69                         char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
     70                         ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
     71                         string asciiString = new string(asciiChars);
     72 
     73                         formattedString = asciiString.Replace(Convert.ToChar(0x0).ToString(), "");                       
     74                     }
     75                     else
     76                     {
     77                         formattedString = dt.Rows[i][j].ToString();
     78                     }
     79 
     80                     row.CreateCell(j).SetCellValue(formattedString);
     81                 }
     82             }
     83 
     84 
     85             NpoiMemoryStream stream = new NpoiMemoryStream();
     86             stream.AllowClose = false;
     87             book.Write(stream);
     88  
     89             stream.Seek(0, SeekOrigin.Begin);
     90             stream.AllowClose = true;
     91             book.Close();
     92 
     93             return stream;
     94         }
     95 
     96         public static List<string> ImportData(Stream stream)
     97         {
     98             List<string> data = new List<string>();
     99             XSSFWorkbook workbook = new XSSFWorkbook(stream);
    100             ISheet sheet = workbook.GetSheet("Sheet1");
    101             for (int row = 0; row <= sheet.LastRowNum; row++)
    102             {
    103                 if (sheet.GetRow(row) != null) //null is when the row only contains empty cells 
    104                 {
    105                     data.Add(sheet.GetRow(row).GetCell(0).StringCellValue);
    106                 }
    107             }
    108             return data;
    109         }
    110     }
    111     public class NpoiMemoryStream : MemoryStream
    112     {
    113         public NpoiMemoryStream()
    114         {
    115             AllowClose = true;
    116         }
    117 
    118         public bool AllowClose { get; set; }
    119         public override void Close()
    120         {
    121             if (AllowClose)
    122                 base.Close();
    123         }
    124     }

     1 // actionresult 调用
     2 //
     3 using System.Web.Mvc;
     4  public class QueryController : Controller{
     5  public ActionResult Excel(string region)
     6  {
     7         System.IO.Stream stream = null;
     8 
     9         var dt = new System.Data.DataTable();
    10         stream = ExcelHelper.ExportData(dt);
    11 
    12         return new FileStreamResult(stream, "application/ms-excel") { FileDownloadName = "Result.xlsx" };
    13 
    14  }
    }
    1 //前台调用代码
    2   function Download() {
    3             var Region = $('#Region').children("option:selected").val();
    4             window.location.href = '@Url.Content("~/Query/Excel?region=")'+Region; 
    5 }
    1  <div class="form-inline">
    2                     <input type="button" value="Download" class="myButton create-btn" style="160px;" onclick="Download()" />
    3                 </div>
  • 相关阅读:
    蓝牙搜索
    Log4cpp介绍及使用
    单独卸载vs2010帮助文档HelpView之后的独立安装教程
    C++Builder RAD Studio XE, UTF-8 String 转换为 char * 字符串的最简单方式, 常用于sqlite3开发
    vs2012 MSDN帮助文档离线包下载安装方法
    关于OBJ/LIB格式,我以前有个总结
    关于C++ const 的全面总结
    在 C++Builder 工程里调用 DLL 函数
    c++builder调用VC的dll以及VC调用c++builder的dll
    C++Builder及VC的库相互调用
  • 原文地址:https://www.cnblogs.com/allenzhang/p/10436718.html
Copyright © 2020-2023  润新知