刚从学校步入工作,阴差阳错的进入了以.net为主的软件公司实习。说实话还是有些陌生的,最近项目中经常遇到需要导出Excel表的功能,秉着前人栽树后人乘凉的思想,虽然也查阅了很多种导出Excel的方法,看过各种大佬写的导出方法。有简单的也有复杂的,所以之前我在项目中使用的导出Excel的方法各种各样。直到遇到了NPOI。参考网上的方法,有的代码写的很长。其实只需要一个方法就可以简单的导出。以DataTable为例进行Excel的导出。只需3步。
一、引入dll
将这两个dll添加引用。我使用的是NPOI2.3.0,下载地址:https://download.youkuaiyun.com/download/dhywjx/10692072
二、写方法
/// <summary>
/// DataTable导出Excel
/// </summary>
/// <param name="dt_result"></param>
private void DataTabletoExcel(DataTable dt_result)
{
IWorkbook excel = new HSSFWorkbook();
ISheet sheet;
IRow row;
//保存文件位置
string SavePath = "";
//导入excel名称
string filename = "";
//写入表名称
sheet = excel.CreateSheet("报价单模板");
//创建第一行标题
row = sheet.CreateRow(0);
//从左往右 ...
row.CreateCell(0).SetCellValue("商品名称");
row.CreateCell(1).SetCellValue("商品ID");
row.CreateCell(2).SetCellValue("库存");
row.CreateCell(3).SetCellValue("指导价");
row.CreateCell(4).SetCellValue("平台售价");
row.CreateCell(5).SetCellValue("商家售价");
//存Excel的文件夹,先在项目中新建好,
SavePath = Server.MapPath("../");
//这个Excel文件的名称
filename = "报价单模板";
//写入DataTable中的数据
for (int i = 0; i < dt_result.Rows.Count; i++)
{
//由于第一行写标题了所以是从第二行开始
row = sheet.CreateRow(i + 1);
//写这一行的数据
for (int j = 0; j < dt_result.Rows.Count; j++)
{
//同理也是从左往右写入数据
row.CreateCell(j).SetCellValue(dt_result.Rows[i][j].ToString());
sheet.AutoSizeColumn(j);
}
}
//保存Excel的路径和文件名称拼接
string url = SavePath + @"\excel\" + filename + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
//写入文件
FileStream xlsfile = new FileStream(url, FileMode.Create);
excel.Write(xlsfile);
xlsfile.Close();
//==== 如果只想导出本地这样就已经OK了,下面是网页上客户端下载导出的Excel =====
FileStream fileopen = new FileStream(url, FileMode.Open);
byte[] bytes = new byte[(int)fileopen.Length];
fileopen.Read(bytes, 0, bytes.Length);
Response.ContentType = "application/octet-stream";
//页面下载时的文件名称
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("报价单模板.xls", System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
fileopen.Close();
Response.Flush();
Response.End();
}
三、调用这个方法
由于这个方法是传入DataTable,所以在传入前,做好类型的转换,当然不只是DataTable,其他类型也是可以导出Excel,这里就需要根据自己的需要来变形。^_^好了。刚实习,感觉还有好多要学习,一点点积累吧!