.net 导出excel_asp.net中使用npoi导出excel电子表格

​NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目,可以在没有安装Office的情况下对Word或Excel文档进行读写操作。

一、添加引用

1、将NPOI.dll、Ioniz.Zip.dll复制到web/bin 文件夹中;

284fd15644ed2a788f2985a4780b0157.png

2、 在common公用工具层添加引用,浏览找到NPOI.dll;

05e49e14b1861d0732e2e2bbfb2babf9.png

二、类库代码

在common中建立类库NPOIExcel.cs

using System;using System.Collections.Generic;using System.Linq;using System.Web;using NPOI;using NPOI.HPSF;using NPOI.HSSF;using NPOI.HSSF.UserModel;using NPOI.POIFS;using NPOI.Util;using System.IO;using System.Data;using System.Data.SqlClient;   public class DataTableRenderToExcel  {       ///        /// DataTable导出到Excel文件       ///        /// 源DataTable       /// 表头文本       /// 保存位置       public static void DataTableToExcel(DataTable dtSource, string strHeaderText, string strFileName)      {           using (MemoryStream ms = DataTableToExcel(dtSource, strHeaderText))          {               using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))              {                   byte[] data = ms.ToArray();                   fs.Write(data, 0, data.Length);                   fs.Flush();              }          }      }       ///        /// DataTable导出到Excel的MemoryStream       ///        /// 源DataTable       /// 表头文本       public static MemoryStream DataTableToExcel(DataTable dtSource, string strHeaderText)      {           HSSFWorkbook workbook = new HSSFWorkbook();           HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();           #region 右击文件 属性信息          {               DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();               dsi.Company = "NPOI";               workbook.DocumentSummaryInformation = dsi;               SummaryInformation si = PropertySetFactory.CreateSummaryInformation();               si.Author = "文件作者信息"; //填加xls文件作者信息               si.ApplicationName = "创建程序信息"; //填加xls文件创建程序信息               si.LastAuthor = "最后保存者信息"; //填加xls文件最后保存者信息               si.Comments = "作者信息"; //填加xls文件作者信息               si.Title = "标题信息"; //填加xls文件标题信息               si.Subject = "主题信息";//填加文件主题信息               si.CreateDateTime = System.DateTime.Now;               workbook.SummaryInformation = si;          }           #endregion           HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle();           HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat();           dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");           //取得列宽           int[] arrColWidth = new int[dtSource.Columns.Count];           foreach (DataColumn item in dtSource.Columns)          {               arrColWidth[item.Ordinal] = System.Text.Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;          }           for (int i = 0; i  arrColWidth[j])                  {                       arrColWidth[j] = intTemp;                  }              }          }           int rowIndex = 0;           foreach (DataRow row in dtSource.Rows)          {               #region 新建表,填充表头,填充列头,样式               if (rowIndex == 65535 || rowIndex == 0)              {                   if (rowIndex != 0)                  {                       sheet = (HSSFSheet)workbook.CreateSheet();                  }                   #region 表头及样式                  {                       HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);                       headerRow.HeightInPoints = 25;                       headerRow.CreateCell(0).SetCellValue(strHeaderText);                       HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();                       headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.LEFT;  //左对齐                       HSSFFont font = (HSSFFont)workbook.CreateFont();                       font.FontHeightInPoints = 20;                       font.Boldweight = 700;                       headStyle.SetFont(font);                       headerRow.GetCell(0).CellStyle = headStyle;                       // sheet.AddMergedRegion(new Region(0, 0, 0, dtSource.Columns.Count - 1));                       //headerRow.Dispose();                  }                   #endregion                   #region 列头及样式                  {                       HSSFRow headerRow = (HSSFRow)sheet.CreateRow(1);                       HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();                       //headStyle.Alignment = CellHorizontalAlignment.CENTER;                       HSSFFont font = (HSSFFont)workbook.CreateFont();                       font.FontHeightInPoints = 10;                       font.Boldweight = 700;                       headStyle.SetFont(font);                       foreach (DataColumn column in dtSource.Columns)                      {                           headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);                           headerRow.GetCell(column.Ordinal).CellStyle = headStyle;                           //设置列宽                sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);                      }                       // headerRow.Dispose();                  }                   #endregion                   rowIndex = 2;              }               #endregion               #region 填充内容               HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);               foreach (DataColumn column in dtSource.Columns)              {                   HSSFCell newCell = (HSSFCell)dataRow.CreateCell(column.Ordinal);                   string drValue = row[column].ToString();                   switch (column.DataType.ToString())                  {                       case "System.String"://字符串类型                           newCell.SetCellValue(drValue);                           break;                       case "System.DateTime"://日期类型                           System.DateTime dateV;                           System.DateTime.TryParse(drValue, out dateV);                           newCell.SetCellValue(dateV);                           newCell.CellStyle = dateStyle;//格式化显示                           break;                       case "System.Boolean"://布尔型                           bool boolV = false;                           bool.TryParse(drValue, out boolV);                           newCell.SetCellValue(boolV);                           break;                       case "System.Int16"://整型                       case "System.Int32":                       case "System.Int64":                       case "System.Byte":                           int intV = 0;                           int.TryParse(drValue, out intV);                           newCell.SetCellValue(intV);                           break;                       case "System.Decimal"://浮点型                       case "System.Double":                           double doubV = 0;                           double.TryParse(drValue, out doubV);                           newCell.SetCellValue(doubV);                           break;                       case "System.DBNull"://空值处理                           newCell.SetCellValue("");                           break;                       default:                           newCell.SetCellValue("");                           break;                  }              }               #endregion               rowIndex++;          }           using (MemoryStream ms = new MemoryStream())          {               workbook.Write(ms);               ms.Flush();               ms.Position = 0;               sheet.Dispose();               //workbook.Dispose();//一般只用写这一个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet               return ms;          }      }       /// 读取excel       /// 默认第一行为标头       ///        /// excel文档路径       ///        public static DataTable Import(string strFileName)      {           DataTable dt = new DataTable();           HSSFWorkbook hssfworkbook;           using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))          {               hssfworkbook = new HSSFWorkbook(file);          }           HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheetAt(0);           System.Collections.IEnumerator rows = sheet.GetRowEnumerator();           HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);           int cellCount = headerRow.LastCellNum;           for (int j = 0; j 读取excel       /// 默认第一行为标头       ///        /// excel文档路径       ///        public static DataTable RenderDataTableFromExcel(string path)      {           DataTable dt = new DataTable();           HSSFWorkbook hssfworkbook;           using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))          {               hssfworkbook = new HSSFWorkbook(file);          }           HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheetAt(0);           System.Collections.IEnumerator rows = sheet.GetRowEnumerator();           HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);           int cellCount = headerRow.LastCellNum;           for (int j = 0; j 
三、前端代码

页面放置导出按钮;

d141a67a0168d124866fa3b6f21cb757.png
     
四、后台代码
protected void export_Click(object sender, EventArgs e)      {                      DataTable dt = new DAL.banqi().GetList(GetWhere());  //以下注释的部分是使用另一个方法        //MemoryStream ms = DataTableRenderToExcel.RenderDataTableToExcel(dt) as MemoryStream;           //Response.AddHeader("Content-Disposition", string.Format("attachment; filename=" + DateTime.Now.ToString("yyyy-MM-dd_HH_mm_ss_fff") + ".xls"));           //Response.BinaryWrite(ms.ToArray());           //Response.ContentType = "application/ms-excel";           //ms.Close();           //ms.Dispose();    //以下使用datatabletoexcel方法,参数为数据表、excel标题名,使用当日日期时间作为导出文件名           MemoryStream ms = DataTableRenderToExcel.DataTableToExcel(dt, "班期数据导出");           Response.AddHeader("Content-Disposition", string.Format("attachment; filename=" + DateTime.Now.ToString("yyyy-MM-dd_HH_mm_ss_fff") + ".xls"));           Response.BinaryWrite(ms.ToArray());           Response.ContentType = "application/ms-excel";           ms.Close();           ms.Dispose();          }

其中DAL数据访问层中GetList方法的代码如下,数据库助手类SqlHelper的代码省略:

// 组合SQL查询语句==========================      public string CombSqlTxt(Model.Banqi banqi)      {           StringBuilder strTemp = new StringBuilder();                     if (!string.IsNullOrEmpty(banqi.bqid))          {               strTemp.Append(" and bqid ='" +banqi.bqid + "'");          }           if (!string.IsNullOrEmpty(banqi.bqmc))          {               strTemp.Append(" and bqmc like '%" + banqi.bqmc + "%'");          }           if (banqi.pxks.ToString() != "0001/1/1 0:00:00" )          {               strTemp.Append(" and [pxks]<='" + banqi.pxks.ToString("yyyy-MM-dd") + "'");          }           if (banqi.pxjs.ToString() != "0001/1/1 0:00:00")          {               strTemp.Append(" and [pxjs]>='" + banqi.pxjs.ToString("yyyy-MM-dd") + "'");          }           return strTemp.ToString();      }//根据条件查询数据,返回dt       public DataTable GetList(Model.Banqi banqi)      {           StringBuilder strSql = new StringBuilder();           strSql.Append("select * from [peixun].[dbo].[banqi] where 1=1");           strSql.Append(CombSqlTxt(banqi));           return new SqlHelper().ExecuteQuery(strSql.ToString(), CommandType.Text);      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值