npoi导出数据到excel(c#npoi 导出excel)

npoi导出数据到excel,原文标题:asp.net中使用npoi导出excel电子表格。​NPOI是一个开源的C#读写excel、WORD等

npoi导出数据到excel,原文标题:asp.net中使用npoi导出excel电子表格。

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

一、添加引用

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

npoi导出数据到excel(c#npoi 导出excel)

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

npoi导出数据到excel(c#npoi 导出excel)

二、类库代码

在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  {       /// <summary>       /// DataTable导出到Excel文件       /// </summary>       /// <param name="dtSource">源DataTable</param>       /// <param name="strHeaderText">表头文本</param>       /// <param name="strFileName">保存位置</param>       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();              }          }      }       /// <summary>       /// DataTable导出到Excel的MemoryStream       /// </summary>       /// <param name="dtSource">源DataTable</param>       /// <param name="strHeaderText">表头文本</param>       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 < dtSource.Rows.Count; i )          {               for (int j = 0; j < dtSource.Columns.Count; j )              {                   int intTemp = System.Text.Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;                   if (intTemp > 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;          }      }       /// <summary>读取excel       /// 默认第一行为标头       /// </summary>       /// <param name="strFileName">excel文档路径</param>       /// <returns></returns>       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 < cellCount; j )          {               HSSFCell cell = (HSSFCell)headerRow.GetCell(j);               dt.Columns.Add(cell.ToString());          }           for (int i = (sheet.FirstRowNum   1); i <= sheet.LastRowNum; i )          {               HSSFRow row = (HSSFRow)sheet.GetRow(i);               DataRow dataRow = dt.NewRow();               for (int j = row.FirstCellNum; j < cellCount; j )              {                   if (row.GetCell(j) != null)                       dataRow[j] = row.GetCell(j).ToString();              }               dt.Rows.Add(dataRow);          }           return dt;      }//以上是新增的。       public static Stream RenderDataTableToExcel(DataTable SourceTable)      {           HSSFWorkbook workbook = new HSSFWorkbook();           MemoryStream ms = new MemoryStream();           HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();           HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);           // handling header.           foreach (DataColumn column in SourceTable.Columns)               headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);           // handling value.           int rowIndex = 1;           foreach (DataRow row in SourceTable.Rows)          {               HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);               foreach (DataColumn column in SourceTable.Columns)              {                   dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());              }               rowIndex ;          }           workbook.Write(ms);           ms.Flush();           ms.Position = 0;           sheet = null;           headerRow = null;           workbook = null;           return ms;      }       public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)      {           MemoryStream ms = RenderDataTableToExcel(SourceTable) as MemoryStream;           FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);           byte[] data = ms.ToArray();           fs.Write(data, 0, data.Length);           fs.Flush();           fs.Close();           data = null;           ms = null;           fs = null;      }//导入excel       public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex)      {           HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);           HSSFSheet sheet = (HSSFSheet)workbook.GetSheet(SheetName);           DataTable table = new DataTable();           HSSFRow headerRow = (HSSFRow)sheet.GetRow(HeaderRowIndex);           int cellCount = headerRow.LastCellNum;           for (int i = headerRow.FirstCellNum; i < cellCount; i )          {               DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);               table.Columns.Add(column);          }           int rowCount = sheet.LastRowNum;           for (int i = (sheet.FirstRowNum   1); i < sheet.LastRowNum; i )          {               HSSFRow row = (HSSFRow)sheet.GetRow(i);               DataRow dataRow = table.NewRow();               for (int j = row.FirstCellNum; j < cellCount; j )                   dataRow[j] = row.GetCell(j).ToString();          }           ExcelFileStream.Close();           workbook = null;           sheet = null;           return table;      }//导入EXCEL       public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex)      {           HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);           HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(SheetIndex);           DataTable table = new DataTable();           HSSFRow headerRow = (HSSFRow)sheet.GetRow(HeaderRowIndex);           int cellCount = headerRow.LastCellNum;           for (int i = headerRow.FirstCellNum; i < cellCount; i )          {               DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);               table.Columns.Add(column);          }           int rowCount = sheet.LastRowNum;           for (int i = (sheet.FirstRowNum   1); i < sheet.LastRowNum; i )          {               HSSFRow row = (HSSFRow)sheet.GetRow(i);               DataRow dataRow = table.NewRow();               for (int j = row.FirstCellNum; j < cellCount; j )              {                   if (row.GetCell(j) != null)                       dataRow[j] = row.GetCell(j).ToString();              }               table.Rows.Add(dataRow);          }           ExcelFileStream.Close();           workbook = null;           sheet = null;           return table;      }       /// <summary>读取excel       /// 默认第一行为标头       /// </summary>       /// <param name="path">excel文档路径</param>       /// <returns></returns>       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 < cellCount; j )          {               HSSFCell cell = (HSSFCell)headerRow.GetCell(j);               dt.Columns.Add(cell.ToString());          }           for (int i = (sheet.FirstRowNum   1); i <= sheet.LastRowNum; i )          {               HSSFRow row = (HSSFRow)sheet.GetRow(i);               DataRow dataRow = dt.NewRow();               for (int j = row.FirstCellNum; j < cellCount; j )              {                   if (row.GetCell(j) != null)                       dataRow[j] = row.GetCell(j).ToString();              }               dt.Rows.Add(dataRow);          }           return dt;      }   }

三、前端代码

页面放置导出按钮;

npoi导出数据到excel(c#npoi 导出excel)

     <asp:Button ID="export" runat="server" CssClass="layui-btn layui-btn-warm"            Text="导出数据" onClick="export_Click" />

四、后台代码

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);      } 本文《npoi导出数据到excel(c#npoi 导出excel)》由网赚联盟( wangzhuan.org.cn )整理或原创,感谢您的阅读。

随机文章

SEO小小课堂网
SEO教程
友情链接交换
关键词排名优化
GEO培训
SEO教程
站长导航
关键词排名优化

百度搜索“网赚联盟”即可找到本站,微信搜索“小小课堂网”关注小小课堂网公众号。网赚联盟( wangzhuan.org.cn )欢迎用户投稿,发布者:洞悉科学,文章版权归作者所有,投稿文章不代表网赚联盟立场,中二少年发布为网赚联盟原创文章,转载请注明出处:https://wangzhuan.org.cn/806881.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注