本事例分为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. Kali Linux RPi0w Nexmon操作笔记

    Kali Linux RPi0w Nexmon镜像下载地址:https://www.offensive-security.com/kali-linux-arm-images/ 1.烧录系统 可参考:树 ...

  2. swoole 消息队列

    <?php /** * 场景: * 监控订单表状态 队列通信 * 一个进程向队列发布消息 另外两个进程争抢 */ //设置主进程名 echo '主进程id:' . posix_getpid() ...

  3. CF 1073 E. Segment Sum

    https://codeforces.com/problemset/problem/1073/E 题意:[l,r]中,出现0—9数字的种类数不超过k的数的和 dp[i][j][0/1] 表示 dfs到 ...

  4. DBCP 数据源获取连接

    Main package p1; import com.JdbcUtils; import org.apache.commons.dbcp.BasicDataSource; import org.ap ...

  5. request和response对象如何解决中文乱码问题?

    出现中文乱码的问题,一般的原因编码和和解码不一致造成的. /* 乱码:编码和解码不一致导致的 GET:你好 POST:?????? tomcat版本:8.5及以上版本 GET请求方式,request对 ...

  6. 科软-信息安全实验1-ICMP重定向

    目录 一 前言 二 Talk is cheap, show me the code 三 效果演示 四 遇到的问题&解决 一 前言 文章不讲解理论知识哈,想学习理论知识的,认真听课

  7. Ubuntu 安装MySQL并打开远程连接

    首先使用su命令切换到root账户 在用apt-get install mysql-server命令获取到MySQL的服务 等待下载安装,按照提示输入MySQL的密码 安装完成后对mysqld.cnf ...

  8. 标准模板库中的链表(list)

    //C++数据结构与算法(第4版) Adam Drozdek 著  徐丹  吴伟敏<<清华大学出版社>> 头文件:include<list> list() 创建一个 ...

  9. node属性

    认识node的方法 1.dom.nodeChildrens 用于获取dom下的子元素节点 2.dom.nodeType 用于获取dom节点的属性.共有12种属性,实用属性3种. 元素节点=>1 ...

  10. spring事务代码实践

    事务一般是指数据库事务,是指作为一个程序执行单元执行的一系列操作,要么完全执行,要么完全不执行.事务就是判断以结果为导向的标准. 一.spring的特性(ACID) (1).原子性(atomicity ...