本事例分为nopi(安装DotNetCore.NPOI)下载和EPPlus(EPPlus.Core.dll)下载,其中npoi下载演示的是根据执行的模板进行数据下载

npoi帮助类NpoiExcelUtility

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Threading.Tasks; namespace ASPNETCoreExcel
{
public class NpoiExcelUtility
{
private string _xlsPath = string.Empty;
private HSSFWorkbook _workBook = null; /// <summary>
/// 构造函数
/// </summary>
/// <param name="xlsPath">xls保存路径</param>
/// <param name="TempletFileName">xls模板路径</param>
public NpoiExcelUtility(string xlsPath, string TempletFileName)
{
_xlsPath = this.CheckFilePath(xlsPath); FileStream file = new FileStream(TempletFileName, FileMode.Open, FileAccess.Read);
_workBook = new HSSFWorkbook(file);
} /// <summary>
/// 将DataTable保存到sheet里
/// </summary>
/// <param name="dt"></param>
/// <param name="sheet"></param>
private void DataTableToExcel(DataTable dt, ISheet sheet)
{
ICellStyle style = _workBook.CreateCellStyle();
style.Alignment = HorizontalAlignment.Left;
style.VerticalAlignment = VerticalAlignment.Center; ICellStyle colStyle = _workBook.CreateCellStyle();
colStyle.Alignment = HorizontalAlignment.Left;
colStyle.VerticalAlignment = VerticalAlignment.Center;
IFont font = _workBook.CreateFont();
font.Color = NPOI.HSSF.Util.HSSFColor.LightBlue.Index;
colStyle.SetFont(font); //列名
//IRow row = sheet.CreateRow(0);
//for (int i = 0; i < dt.Columns.Count; i++)
//{
// sheet.SetDefaultColumnStyle(i, style); // ICell cell = row.CreateCell(i);
// cell.SetCellValue(dt.Columns[i].ToString()); // cell.CellStyle = colStyle;
//}
//内容
var headerRow = (HSSFRow)sheet.GetRow(); for (int i = ; i <= dt.Rows.Count; i++)
{
IRow row = sheet.CreateRow(i + );
row.Height = * ;
ICell numcell = row.CreateCell();
numcell.SetCellValue(i);
for (int j = ; j < dt.Columns.Count; j++)
{
object obj = dt.Rows[i - ][j];
if (obj != null)
{
string ColumnName = dt.Columns[j].ToString();
var _Column = headerRow.Cells.Find(t => !string.IsNullOrEmpty(t.StringCellValue) && t.ToString().ToLower() == ColumnName.ToLower());
//ICell cell = row.CreateCell(j + 1);
if (_Column != null)
{
ICell cell = row.CreateCell(_Column.ColumnIndex);
if (obj is double || obj is float || obj is int || obj is long || obj is decimal)
{
cell.SetCellValue(Convert.ToDouble(obj));
}
else if (obj is bool)
{
cell.SetCellValue((bool)obj);
}
else
{
cell.SetCellValue(obj.ToString());
}
}
}
}
}
} /// <summary>
/// 保存Excel
/// </summary>
public void SaveExcel()
{
FileStream file = new FileStream(_xlsPath, FileMode.Create);
_workBook.Write(file);
file.Close();
} /// <summary>
/// 创建Sheet
/// </summary>
/// <param name="sheetName">sheet名称</param>
/// <param name="tbl">DataTable数据表,当行数大于65536时,自动分割成几个sheet,sheet名称为sheetName_i</param>
public void CreatExcelSheet(string sheetName, DataTable tbl)
{
string sName = this.CheckSheetName(sheetName); int rowMax = ;
int intNum = tbl.Rows.Count / rowMax;
int remainder = tbl.Rows.Count % rowMax; for (int i = ; i < intNum; i++)
{
DataTable subTbl = tbl.Clone();
for (int j = ; j < ; j++)
{
int rowIndex = i * rowMax + j;
subTbl.Rows.Add(tbl.Rows[rowIndex].ItemArray);
}
string subSheet = sName + "_" + (i + );
//ISheet sheet = _workBook.CreateSheet(subSheet);
ISheet sheet = _workBook.GetSheetAt();
this.DataTableToExcel(subTbl, sheet);
}
if (remainder > )
{
DataTable subTbl = tbl.Clone();
for (int j = ; j < remainder; j++)
{
int rowIndex = intNum * rowMax + j;
subTbl.Rows.Add(tbl.Rows[rowIndex].ItemArray);
}
string subSheet = sName + "_" + (intNum + );
if (intNum < )
{
subSheet = sName;
}
//ISheet sheet = _workBook.CreateSheet(subSheet);
ISheet sheet = _workBook.GetSheetAt();
this.DataTableToExcel(subTbl, sheet);
}
} /// <summary>
/// 检查sheet名称是否合法,并去掉不合法字符
/// </summary>
/// <param name="sheetName"></param>
private string CheckSheetName(string sheetName)
{
string rlt = sheetName;
string[] illegalChars = { "*", "?", "\"", @"\", "/" };
for (int i = ; i < illegalChars.Length; i++)
{
rlt = rlt.Replace(illegalChars[i], "");
}
return rlt;
} /// <summary>
/// 检查xls路径是否合法,并去掉不合法字符
/// </summary>
/// <param name="filePath"></param>
private string CheckFilePath(string filePath)
{
string dir = Path.GetDirectoryName(filePath);
string fileName = Path.GetFileNameWithoutExtension(filePath);
string ext = Path.GetExtension(filePath); string[] illegalChars = { ":", "*", "?", "\"", "<", ">", "|", @"\", "/" };
for (int i = ; i < illegalChars.Length; i++)
{
fileName = fileName.Replace(illegalChars[i], "");
}
string rlt = Path.Combine(dir, fileName + ext);
return rlt;
}
}
}

调用

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using ASPNETCoreExcel.Models;
using Microsoft.AspNetCore.Hosting;
using System.IO;
using OfficeOpenXml;
using System.Data; namespace ASPNETCoreExcel.Controllers
{
public class HomeController : Controller
{
private IHostingEnvironment _hostingEnvironment; public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
public IActionResult Index()
{
return View();
} public IActionResult About()
{
ViewData["Message"] = "Your application description page."; return View();
} public IActionResult Contact()
{
ViewData["Message"] = "Your contact page."; return View();
} public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
/// <summary>
/// 不根据指定模板进行导出excel下载(非npoi实现)
/// </summary>
/// <returns></returns>
public IActionResult Export2()
{
string sWebRootFolder = _hostingEnvironment.WebRootPath;
string sFileName = "部落.xlsx"; FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
file.Delete();
using (ExcelPackage package = new ExcelPackage(file))
{
// 添加worksheet
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("部落");
//添加头
worksheet.Cells[, ].Value = "ID";
worksheet.Cells[, ].Value = "Name";
worksheet.Cells[, ].Value = "Url";
//添加值
worksheet.Cells["A2"].Value = ;
worksheet.Cells["B2"].Value = "For丨丶";
worksheet.Cells["C2"].Value = "https://buluo.qq.com/p/barindex.html?bid=310072"; worksheet.Cells["A3"].Value = ;
worksheet.Cells["B3"].Value = "For丨丶Tomorrow";
worksheet.Cells["C3"].Value = "https://buluo.qq.com/p/barindex.html?bid=310072";
worksheet.Cells["C3"].Style.Font.Bold = true;
package.Save();
}
return File(sFileName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", sFileName);
} /// <summary>
/// 根据指定模板进行导出excel下载(npoi实现)
/// </summary> public IActionResult Export()
{
var TempletFilePath = @"D:\谷歌下载\ASPNETCore操作Excel\ASPNETCoreExcel\Template";//模板地址
var ExportFilePath = "D:";//导出后存放的地址
string TempletFileName = string.Format("{0}\\调查表.xls", TempletFilePath);
string ExportFileName = string.Format("{0}\\调查表_{1}.xls", ExportFilePath, DateTime.Now.ToString("yyyy年MM月dd日hh时mm分ss秒")); var _NpoiExcelUtility = new NpoiExcelUtility(ExportFileName, TempletFileName);
#region 测试数据
//创建DataTable
DataTable dt = new DataTable("NewDt"); //创建自增长的ID列
DataColumn dc = dt.Columns.Add("id", Type.GetType("System.Int32"));
dc.AutoIncrement = true; //自动增加
dc.AutoIncrementSeed = ; //起始为1
dc.AutoIncrementStep = ; //步长为1
dc.AllowDBNull = false; //非空 //创建其它列表
dt.Columns.Add(new DataColumn("Name", Type.GetType("System.String"))); //创建数据
DataRow dr = dt.NewRow();
dr["Name"] = "张三";
dt.Rows.Add(dr); dr = dt.NewRow();
dr["Name"] = "李四";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["Name"] = "王五";
dt.Rows.Add(dr);
#endregion
_NpoiExcelUtility.CreatExcelSheet("调查表", dt);
_NpoiExcelUtility.SaveExcel();
var stream = System.IO.File.OpenRead(ExportFileName);//excel表转换成流
return File(stream, "application/vnd.android.package-archive", Path.GetFileName(ExportFileName));//进行浏览器下载 } }
}

前端界面

@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Xlsx</title>
</head>
<body>
<h2>ASP.NET Core 导出Excel xlsx 文件</h2>
<a asp-action="Export">导出Excel</a>
</body>
</html>

代码下载

ASP.NETCore -----导出Excel文件并下载的更多相关文章

  1. asp.net 导出excel文件

    之前做过winfrom程序的导出excel文件的功能,感觉非常简单.现在试着做asp.net中导出excel的功能,之前用的是Microsoft.Office.Interop.Excel这个对象来实现 ...

  2. ASP.NET导出Excel文件

    第一种最常见,并且最简单的方式,直接把GridView导出,导出格式为文本表格形式. protected void btnSaveExcel_Click(object sender, EventArg ...

  3. ASP.NETCore -----导入Excel文件

    前端上传excel文件利用npoi读取数据转换成datatable(netcore坑爹啊,用的vs2017竟然不能可视化) 前端界面 @{ Layout = null; } <!DOCTYPE ...

  4. ASP.NET 导出EXCEL文件处理多对应排列的

    这次项目遇到了一个导出excel需要对应排列的问题.本来在做这个项目之前都基本没做过excel导出的菜鸡,这次强行做还是有些忐忑的,加上那个表的结构比较奇特.    废话不多说,先介绍表结构吧 是数据 ...

  5. ASP.NET 导出excel文件出现乱码的解决办法

    string html =TABLE ;//<table>标签,可以是多张表string modified = Regex.Replace(html, "<table &g ...

  6. Spring Boot下的一种导出Excel文件的代码框架

    1.前言 ​ 在Spring Boot项目中,将数据导出成Excel格式文件是常见的功能.与Excel文件导入类似,此处也用代码框架式的方式实现Excel文件导出,使得代码具有可重用性,并保持导出数据 ...

  7. ASP.NET Core导入导出Excel文件

    ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...

  8. 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法

    -----转载:http://blog.csdn.net/sgear/article/details/7663502 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格 ...

  9. asp.net导出excel示例代码

    asp.net导出excel的简单方法. excel的操作,最常用的就是导出和导入. 本例使用NPOI实现. 代码:/// <summary> );             ;       ...

随机推荐

  1. ubuntu13.10设置永久静态IP重启不失效

    步骤: 1.vi打开/etc/network/interfaces 2.手动添加static ip address 3.:wq保存退出 4.重启网络 service network-manager r ...

  2. [转]JSP自定义标签

    原文链接 当jsp的内置标签和jstl标签库内的标签都满足不了需求,这时候就需要开发者自定义标签. 自定义标签 下面我们先来开发一个自定义标签,然后再说它的原理吧! 自定义标签的开发步骤 步骤一 编写 ...

  3. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:为所有表格的单元格添加边框

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. AD7705/TM7705使用注意事项

    http://bbs.eeworld.com.cn/thread-66467-1-1.html 1 空闲是SCLK=1(C POA),DIN=1(因为写寄存器都是从写通讯寄存器开始,此时第8位必须为0 ...

  5. 第1节 Scala基础语法:5、6、7、8、基础-申明变量和常用类型,表达式,循环,定义方法和函数

    4.    Scala基础 4.1.   声明变量 package cn.itcast.scala object VariableDemo {   def main(args: Array[Strin ...

  6. Thymeleaf的内置属性(转)

    原文链接: http://somefuture.iteye.com/blog/2253761 Thymeleaf是另一个Java视图模板引擎,使用上和FreeMarker各有千秋,不了解的可以从其他博 ...

  7. e_book

    1. 奢侈的纸制书籍 2. 电子书 2.1 与印刷书籍的比较 2.2 电子书格式 2.2.1 Kindle 2.2.2 PDF 2.2.3 EPUB 2.2.4 更多电子书格式比较 2.3 公共领域的 ...

  8. js中各种类型转换为Boolean类型

    数据类型  转换为true的值  转换为false的值 Boolean  true  false String  任何非空字符串  空字符串 Number  任何非零数字值(包括无穷大) 0和null ...

  9. UITextField的使用、介绍、讲解、全解、简介、说明

    [2018年中秋节良心写作]文章将尽可能的全面介绍UITextField的所有相关知识,逻辑连贯,需要认真理解,一气呵成. 关键词: 屏幕键盘(onscreen keyboard).键盘自定义.键盘类 ...

  10. c# 事件3

    1.什么是事件,使对象或者类具有通知功能的成员.//为了解决字段在外部被滥用,推出了事件 事件的功能能=通知+可选的事件参数(具体的详细信息,包括谁发送了消息,发送的什么消息) 使用:用于对象或者类件 ...