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>