先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。
.Net导出代码:
1 /// <summary> 2 /// 导出 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 protected void But_Excel_Click(object sender, EventArgs e) 7 { 8 string[] fileName = { "State_title", "Last_url", "State_url", "IsNewUser", "State_time", "IpAddress", "ExtStr1", "ExtStr2", "VisitTime", "VisitWay", "KeyWords", "UserAction", "Remark" }; 9 string[] title = { "受访网页", "来源网页", "受访网页URL", "新老访客", "访问时长", "IP地址", "地域", "访客标识码", "访问时间", "浏览方式", "关键字", "用户行为", "备注" }; 10 DataToExcel.ExportSiteState(fileName, title, "tb_SiteStats", "列表_" + DateTime.Now.ToString("yyy-MM-dd"), strWhere, " VisitTime desc "); 11 }
1 /// <summary> 2 /// add by lwf 2016-07-13 16:22:19 3 /// </summary> 4 /// <param name="fileName"></param> 5 /// <param name="title"></param> 6 /// <param name="tableName"></param> 7 /// <param name="sheetName"></param> 8 /// <param name="strWhere"></param> 9 /// <param name="sort"></param> 10 public static void ExportSiteState(string[] fileName, string[] title, string tableName, string sheetName, string strWhere, string sort) 11 { 12 string sql = "select "; 13 if (fileName == null || fileName.Length < 1) 14 { 15 sql += "* "; 16 } 17 else 18 { 19 foreach (string key in fileName) 20 { 21 sql += key + ","; 22 } 23 sql = System.Text.RegularExpressions.Regex.Replace(sql, ",$", " "); 24 } 25 sql += "from " + tableName; 26 if (!string.IsNullOrEmpty(strWhere)) 27 { 28 sql += " where " + strWhere; 29 } 30 if (!string.IsNullOrEmpty(sort)) 31 { 32 sql += " order by " + sort; 33 } 34 35 //获取需要导出的数据 36 DataTable dt = DbHelperSQLServer.Query(sql).Tables[0]; 37 NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); 38 NPOI.SS.UserModel.Sheet sheet = book.CreateSheet(sheetName); 39 NPOI.SS.UserModel.Row row = sheet.CreateRow(0); 40 41 //设置列名称和数据 42 if (title == null || title.Length < 1) 43 { 44 for (int i = 0; i < dt.Columns.Count; i++) 45 { 46 row.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName); 47 } 48 for (int i = 0; i < dt.Rows.Count; i++) 49 { 50 NPOI.SS.UserModel.Row row2 = sheet.CreateRow(i + 1); 51 for (int j = 0; j < dt.Columns.Count; j++) 52 row2.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString()); 53 } 54 } 55 else 56 { 57 for (int i = 0; i < title.Length; i++) 58 { 59 row.CreateCell(i).SetCellValue(title[i].ToString()); 60 } 61 for (int i = 0; i < dt.Rows.Count; i++) 62 { 63 NPOI.SS.UserModel.Row row2 = sheet.CreateRow(i + 1); 64 for (int j = 0; j < fileName.Length; j++) 65 row2.CreateCell(j).SetCellValue(dt.Rows[i][fileName[j]].ToString()); 66 } 67 } 68 //写入到客户端 69 System.IO.MemoryStream ms = new System.IO.MemoryStream(); 70 book.Write(ms); 71 System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=Export_" + DateTime.Now.ToString("yyyy-MM-dd") + ".xls")); 72 System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray()); 73 book = null; 74 ms.Close(); 75 ms.Dispose(); 76 }
DataTable转换成Excel文档流(导出数据量超出65535条,分sheet):
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using Maticsoft.DBUtility; 5 using System.Collections; 6 using System.Data; 7 using System.Web; 8 using DAL; 9 using NPOI.HSSF.UserModel; 10 using System.IO; 11 using NPOI.SS.UserModel; 12 namespace DAL 13 { 14 public class DataToExcel 15 {/// <summary> 16 /// DataTable转换成Excel文档流,并输出到客户端 17 /// </summary> 18 /// <param name="table"></param> 19 /// <param name="response"></param> 20 /// <param name="fileName">输出的文件名</param> 21 public static void RenderToDataTableToExcel(DataTable table,HttpContext context, string fileName) 22 { 23 using (MemoryStream ms = ExportDataTableToExcel(table)) 24 { 25 RenderToBrowser(ms, context, fileName); 26 } 27 } 28 29 /// <summary> 30 /// DataTable转换成Excel文档流(导出数据量超出65535条,分sheet) 31 /// </summary> 32 /// <param name="table"></param> 33 /// <returns></returns> 34 public static MemoryStream ExportDataTableToExcel(DataTable sourceTable) 35 { 36 HSSFWorkbook workbook = new HSSFWorkbook(); 37 MemoryStream ms = new MemoryStream(); 38 int dtRowsCount = sourceTable.Rows.Count; 39 int SheetCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(dtRowsCount) / 65536)); 40 int SheetNum = 1; 41 int rowIndex = 1; 42 int tempIndex = 1; //标示 43 ISheet sheet = workbook.CreateSheet("sheet1" + SheetNum); 44 for (int i = 0; i < dtRowsCount; i++) 45 { 46 if (i == 0 || tempIndex == 1) 47 { 48 IRow headerRow = sheet.CreateRow(0); 49 foreach (DataColumn column in sourceTable.Columns) 50 headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName); 51 } 52 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(tempIndex); 53 foreach (DataColumn column in sourceTable.Columns) 54 { 55 dataRow.CreateCell(column.Ordinal).SetCellValue(sourceTable.Rows[i][column].ToString()); 56 } 57 if (tempIndex == 65535) 58 { 59 SheetNum++; 60 sheet = workbook.CreateSheet("sheet" + SheetNum);// 61 tempIndex = 0; 62 } 63 rowIndex++; 64 tempIndex++; 65 //AutoSizeColumns(sheet); 66 } 67 workbook.Write(ms); 68 ms.Flush(); 69 ms.Position = 0; 70 sheet = null; 71 // headerRow = null; 72 workbook = null; 73 return ms; 74 } 75 76 /// <summary> 77 /// 输出文件到浏览器 78 /// </summary> 79 /// <param name="ms">Excel文档流</param> 80 /// <param name="context">HTTP上下文</param> 81 /// <param name="fileName">文件名</param> 82 private static void RenderToBrowser(MemoryStream ms, HttpContext context, string fileName) 83 { 84 if (context.Request.Browser.Browser == "IE") 85 fileName = HttpUtility.UrlEncode(fileName); 86 context.Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName); 87 context.Response.BinaryWrite(ms.ToArray()); 88 } 89 } 90 }
.NET导入代码:
1 HSSFWorkbook hssfworkbook; 2 #region 3 public DataTable ImportExcelFile(string filePath) 4 { 5 #region//初始化信息 6 try 7 { 8 using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) 9 { 10 hssfworkbook = new HSSFWorkbook(file); 11 } 12 } 13 catch (Exception e) 14 { 15 throw e; 16 } 17 #endregion 18 19 NPOI.SS.UserModel.Sheet sheet = hssfworkbook.GetSheetAt(0); 20 System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); 21 DataTable dt = new DataTable(); 22 for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++) 23 { 24 dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString()); 25 } 26 while (rows.MoveNext()) 27 { 28 HSSFRow row = (HSSFRow)rows.Current; 29 DataRow dr = dt.NewRow(); 30 for (int i = 0; i < row.LastCellNum; i++) 31 { 32 NPOI.SS.UserModel.Cell cell = row.GetCell(i); 33 if (cell == null) 34 { 35 dr[i] = null; 36 } 37 else 38 { 39 dr[i] = cell.ToString(); 40 } 41 } 42 dt.Rows.Add(dr); 43 } 44 return dt; 45 } 46 #endregion