C# NPOI 导出Execl 工具类

时间:2021-10-15 20:31:19

NPOI 导出Execl 自己单独工具类

详见代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NPOI.HPSF;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using System.Data;
using System.IO;
using System.Web;
using System.Reflection;
using System.ComponentModel; namespace NPOIHelper
{
public class NPOIHelper
{
/// <summary>
/// DataTable导出到Excel文件
/// </summary>
/// <param name="dt">源DataTable</param>
/// <param name="strHeaderText">表头文本</param>
/// <param name="strFileName">保存位置</param>
public static void ExportTableExecl(DataTable dt, string strHeaderText, string strFileName)
{
using (MemoryStream ms = Exprot(dt, strHeaderText))
{
using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
{
byte[] data = ms.ToArray();
fs.Write(data, , data.Length);
fs.Flush();
}
}
} /// <summary>
/// 用于Web 导出
/// </summary>
/// <param name="dtSource">源DataTable</param>
/// <param name="strHeaderText">表头文本</param>
/// <param name="strFileName">文件名</param> public static void ExportByWeb(DataTable dtSource, string strHeaderText, string strFileName)
{
HttpContext context = HttpContext.Current; context.Response.ContentType = "application/vnd.ms-excel";
context.Response.ContentEncoding = Encoding.UTF8;
context.Response.Charset = "";
context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(strFileName, Encoding.UTF8)); context.Response.BinaryWrite(Exprot(dtSource, strHeaderText).GetBuffer());
context.Response.End();
} /// <summary>
/// 将泛型的list 集合导出Execl
/// </summary>
/// <typeparam name="T">实体对象</typeparam>
/// <param name="list">集合</param>
/// <param name="strHeaderText">表头</param>
/// <param name="strFileName">文件名字</param>
public static void ExportToList<T>(List<T> list, string strHeaderText,string strFileName)
{
using (MemoryStream ms = ExprotToList<T>(list,strHeaderText))
{
using (FileStream fs = new FileStream(strFileName,FileMode.Create,FileAccess.Write))
{
byte[] data = ms.ToArray();
fs.Write(data,,data.Length);
fs.Flush();
}
}
} /// <summary>
/// DataTable导出到Excel的MemoryStream
/// </summary>
/// <param name="dt">数据源DataTable</param>
/// <param name="strHeaderText">表头文本</param>
/// <returns></returns>
public static MemoryStream Exprot(DataTable dt, string strHeaderText)
{
HSSFWorkbook workBook = new HSSFWorkbook(); ISheet sheet = workBook.CreateSheet(); #region 右键属性
{
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "NPOI";
workBook.DocumentSummaryInformation =dsi; SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Author = "文件作者信息";
si.ApplicationName = "创建程序信息";
si.LastAuthor = "最后保存者信息";
si.Comments = "作者信息";
si.Title = "标题信息";
si.Subject = "主题信息";
si.CreateDateTime = DateTime.Now;
workBook.SummaryInformation = si;
}
#endregion ICellStyle dateStyle = workBook.CreateCellStyle();
IDataFormat dateFormat = workBook.CreateDataFormat();
dateStyle.DataFormat = dateFormat.GetFormat("yyyy-MM-dd"); //获取列宽
int[] arrCollWidth = new int[dt.Columns.Count]; foreach (DataColumn item in dt.Columns)
{
arrCollWidth[item.Ordinal] = Encoding.GetEncoding().GetBytes(item.ColumnName.ToString()).Length;
} for (int i = ; i < dt.Rows.Count; i++)
{
for (int j = ; j < dt.Columns.Count; j++)
{
int intTemp = Encoding.GetEncoding().GetBytes(dt.Rows[i][j].ToString()).Length; if (intTemp > arrCollWidth[j])
{
arrCollWidth[j] = intTemp;
} }
} int rowIndex = ; foreach (DataRow item in dt.Rows)
{
#region 新建表 填充表头 列头 样式
{
if (rowIndex == || rowIndex == )
{
if (rowIndex != )
{
sheet = workBook.CreateSheet();
} #region 表头及样式
{
IRow headerRow = sheet.CreateRow();
headerRow.HeightInPoints = ;
headerRow.CreateCell().SetCellValue(strHeaderText); //填充填表 ICellStyle headerStyle = workBook.CreateCellStyle();
headerStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
IFont font = workBook.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
headerStyle.SetFont(font); headerRow.GetCell().CellStyle = headerStyle;
sheet.AddMergedRegion(new CellRangeAddress(, , , dt.Columns.Count - ));
// headerRow.Dispose();
}
#endregion #region 列头及样式
{
IRow headRow = sheet.CreateRow();
ICellStyle headerStyle = workBook.CreateCellStyle();
headerStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; IFont font = workBook.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
headerStyle.SetFont(font); foreach (DataColumn cl in dt.Columns)
{
headRow.CreateCell(cl.Ordinal).SetCellValue(cl.ColumnName);
headRow.GetCell(cl.Ordinal).CellStyle = headerStyle; //设置列宽
sheet.SetColumnWidth(cl.Ordinal, (arrCollWidth[cl.Ordinal]+)*);
}
}
#endregion rowIndex = ;
}
}
#endregion #region 填充内容
{ IRow row = sheet.CreateRow(rowIndex);
foreach (DataColumn column in dt.Columns)
{
ICell cell = row.CreateCell(column.Ordinal); string drValue = item[column].ToString(); switch (column.DataType.ToString())
{
case "System.String":
cell.SetCellValue(drValue);
break; case "System.DateTime":
DateTime dateV;
DateTime.TryParse(drValue, out dateV);
cell.SetCellValue(dateV); cell.CellStyle = dateStyle;
break; case "System.Boolean":
bool boolV;
bool.TryParse(drValue, out boolV);
cell.SetCellValue(boolV);
break; case "System.Int16":
case "System.Int32":
case "System.Int64":
case "System.Byte":
int intV = ;
int.TryParse(drValue, out intV);
cell.SetCellValue(intV);
break; case "System.Decimal":
case "System.Double":
double doubleV = ;
double.TryParse(drValue, out doubleV);
cell.SetCellValue(doubleV);
break; case "System.DBNull":
cell.SetCellValue("");
break;
default:
cell.SetCellValue("");
break;
}
} }
#endregion rowIndex++;
} using (MemoryStream ms = new MemoryStream())
{
workBook.Write(ms);
ms.Flush();
ms.Position = ;
//sheet.Dispose();
//workBook.Dispose();
return ms;
} } /// <summary>
/// 将list 集合导处 Execl
/// </summary>
/// <param name="list">泛型集合</param>
/// <param name="strHeaderName">表头名字</param>
/// <returns></returns>
public static MemoryStream ExprotToList<T>(List<T> list, string strHeaderName)
{ HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet(); //创建样式 ICellStyle cellStyle = workbook.CreateCellStyle();
IDataFormat dataFormat = workbook.CreateDataFormat();
cellStyle.DataFormat = dataFormat.GetFormat("yyyy-MM-dd"); //IRow headerRow = sheet.CreateRow(0);
//headerRow.CreateCell(0).SetCellValue(strHeaderName); //表头样式
IRow headerRow = sheet.CreateRow();
headerRow.HeightInPoints = ;
headerRow.CreateCell().SetCellValue(strHeaderName); //填充填表 ICellStyle headerStyle = workbook.CreateCellStyle();
headerStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
IFont font = workbook.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
headerStyle.SetFont(font); headerRow.GetCell().CellStyle = headerStyle;
sheet.AddMergedRegion(new CellRangeAddress(, , , list[].GetType().GetProperties().Length - )); IRow rows = sheet.CreateRow(); //获取list属性值
PropertyInfo[] propertyInfo = list[].GetType().GetProperties(); #region 获取 实体 中的 [DisplayName("姓名")]
{
//获取 实体 中的 [DisplayName("姓名")] Type entity = list[].GetType(); for (int i = ; i < propertyInfo.Length; i++)
{
var pName = entity.GetProperty(propertyInfo[i].Name.ToString()).GetCustomAttribute<DisplayNameAttribute>(); rows.CreateCell(i).SetCellValue(pName.DisplayName);
} }
#endregion #region 获取实体的属性值
{ //for (int i = 0; i < propertyInfo.Length; i++)
//{
// rows.CreateCell(i).SetCellValue(propertyInfo[i].Name.ToString());
//}
}
#endregion //填充内容
int propertyIndex = ; foreach (var item in list)
{
IRow row = sheet.CreateRow(propertyIndex); for (int i = ; i < propertyInfo.Length; i++)
{
var obj = propertyInfo[i].GetValue(item, null); row.CreateCell(i).SetCellValue(obj.ToString());
} propertyIndex++;
} //宽度自适应
for (int i = ; i < list.Count; i++)
{
sheet.AutoSizeColumn(i);
} using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
ms.Flush();
ms.Position = ;
return ms;
} } /// <summary>
/// 读取Execl 表格
/// </summary>
/// <param name="fileName">文件路径</param>
/// <returns></returns>
public static DataTable GetReaderExecl(string fileName)
{
DataTable dt = new DataTable(); HSSFWorkbook workBook; using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
workBook = new HSSFWorkbook(fs);
} ISheet sheet = workBook.GetSheetAt();
System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); IRow headerRow = sheet.GetRow();
int cellCount = headerRow.LastCellNum; for (int i = ; i < cellCount; i++)
{
ICell cell = headerRow.GetCell(i);
dt.Columns.Add(cell.ToString());
} for (int j = (sheet.FirstRowNum + ); j <= sheet.LastRowNum; j++)
{
IRow row = sheet.GetRow(j); DataRow dr = dt.NewRow(); for (int i = row.FirstCellNum; i <= cellCount; i++)
{
if (row.GetCell(i) != null)
{
dr[i] = row.GetCell(i).ToString();
}
} dt.Rows.Add(dr);
} return dt;
} }
}

解析一下 泛型集合导出Execl 中的一个问题

第一步:首先定义一个实体类

  public class People
{
[DisplayName("姓名")]
public string name { get; set; } [DisplayName("年龄")]
public string Age { get; set; } [DisplayName("性别")]
public string Sex { get; set; }
}

第二步:直接调用

 NPOIHelper.NPOIHelper.ExportToList<People>(this.GetLists(), "list","list.xls");

这样导出结果是这样的

aaarticlea/png;base64,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" alt="" />

表头显示的是 中文的 也就是实体类中的DisplayName 的值;如果不想使用这个值,想使用属性值得 也是可以的;将上面的代码 注释一下,将下面的 的代码解注一下 就OK 了

修改的代码如下:

 /// <summary>
/// 将list 集合导处 Execl
/// </summary>
/// <param name="list">泛型集合</param>
/// <param name="strHeaderName">表头名字</param>
/// <returns></returns>
public static MemoryStream ExprotToList<T>(List<T> list, string strHeaderName)
{ HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet(); //创建样式 ICellStyle cellStyle = workbook.CreateCellStyle();
IDataFormat dataFormat = workbook.CreateDataFormat();
cellStyle.DataFormat = dataFormat.GetFormat("yyyy-MM-dd"); //IRow headerRow = sheet.CreateRow(0);
//headerRow.CreateCell(0).SetCellValue(strHeaderName); //表头样式
IRow headerRow = sheet.CreateRow();
headerRow.HeightInPoints = ;
headerRow.CreateCell().SetCellValue(strHeaderName); //填充填表 ICellStyle headerStyle = workbook.CreateCellStyle();
headerStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
IFont font = workbook.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
headerStyle.SetFont(font); headerRow.GetCell().CellStyle = headerStyle;
sheet.AddMergedRegion(new CellRangeAddress(, , , list[].GetType().GetProperties().Length - )); IRow rows = sheet.CreateRow(); //获取list属性值
PropertyInfo[] propertyInfo = list[].GetType().GetProperties(); #region 获取 实体 中的 [DisplayName("姓名")]
{
//获取 实体 中的 [DisplayName("姓名")] //Type entity = list[0].GetType(); //for (int i = 0; i < propertyInfo.Length; i++)
//{
// var pName = entity.GetProperty(propertyInfo[i].Name.ToString()).GetCustomAttribute<DisplayNameAttribute>(); // rows.CreateCell(i).SetCellValue(pName.DisplayName);
//} }
#endregion #region 获取实体的属性值
{ for (int i = ; i < propertyInfo.Length; i++)
{
rows.CreateCell(i).SetCellValue(propertyInfo[i].Name.ToString());
}
}
#endregion //填充内容
int propertyIndex = ; foreach (var item in list)
{
IRow row = sheet.CreateRow(propertyIndex); for (int i = ; i < propertyInfo.Length; i++)
{
var obj = propertyInfo[i].GetValue(item, null); row.CreateCell(i).SetCellValue(obj.ToString());
} propertyIndex++;
} //宽度自适应
for (int i = ; i < list.Count; i++)
{
sheet.AutoSizeColumn(i);
} using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
ms.Flush();
ms.Position = ;
return ms;
} }

效果图:

aaarticlea/png;base64,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" alt="" />