mvc 根据模板导出excel,直接导出文件流
1.c#
/// <summary>
/// 导出员工
/// </summary>
/// <returns></returns>
[HttpGet]
public FileResult ExportEmployee()
{
var eid = getEnterpriseId(); LogWriter.ToDebug($"导出员工开始"); string templateUrl = "/ExportFile/Template/ExportEmployeesTemplate.xls";
//string temporaryUrl = $"/ExportFile/Temporary/ExportEmployees_{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}.xls"; string templateRealUrl = Request.MapPath(templateUrl);
//string temporaryRealUrl = Request.MapPath(temporaryUrl); //System.IO.File.Copy(templateRealUrl, temporaryRealUrl, true);
var result = ExportEmployees(eid, templateRealUrl); LogWriter.ToDebug($"导出员工结束");
return result; //return Json(new ResultInfo(1001, "导出员工失败")); }
private FileResult ExportEmployees(Guid eId, string tempFileUrl)
{
var employeesList = EnterpriseBLL.GetExportEmployees(eId);
IWorkbook workbook;
try
{
using (FileStream stream = System.IO.File.Open(tempFileUrl, FileMode.Open, FileAccess.Read))
{
workbook = new HSSFWorkbook(stream);
ISheet sheet = workbook.GetSheet("Sheet1");
for (int i = ; i < employeesList.Count; i++)
{
IRow row = sheet.CreateRow(i + );
for (int j = ; j < ; j++)
{
ICell cell = row.CreateCell(j);
cell.SetCellValue(EnterpriseBLL.getCellValue(employeesList[i], j));
}
} }
//转为字节数组
NpoiMemoryStream streamOut = new NpoiMemoryStream();
streamOut.AllowClose = false;
workbook.Write(streamOut);
streamOut.Seek(, SeekOrigin.Begin);
//return File(stream, "application/vnd.ms-excel", file);
return File(streamOut, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Employees.xls"); }
catch (Exception ex)
{
LogWriter.ToError($"ZJCX.ZJCDPC.WebUI->EnterpriseBLL->ExportEmployees内部错误,{ex.Message}", ex);
throw ex;
}
}
//新建类 重写Npoi流方法
public class NpoiMemoryStream : MemoryStream
{
public NpoiMemoryStream()
{
AllowClose = true;
} public bool AllowClose { get; set; } public override void Close()
{
if (AllowClose)
base.Close();
}
}
前端:
通过创建a标签实现重命名文件
this.$getDownload('/API/ExportEmployee').then(res => {
let blob = new Blob([res.data], { type: "application/vnd.openxmlformats-officedocument.spreadsheethml.sheet" });
let objctUrl = URL.createObjectURL(blob); var a = document.createElement('a');
a.innerHTML = "员工信息.xls";
a.download = "员工信息.xls";
a.href = objctUrl;
document.body.appendChild(a); var evt = document.createEvent("MouseEvents");
evt.initEvent("click", false, false);
a.dispatchEvent(evt);
document.body.removeChild(a);
})
前端用的vue-anxio,需要注意:
//get请求封装
export function getDownload(url) {
return new Promise((resolve, reject) => { axios({
method: 'get',
url: baseUrl+url,
responseType: 'arraybuffer'
}).then(res => {
resolve(res)
}, err => {
console.log('get 报错');
reject(err);
})
})
};
mvc 根据模板导出excel,直接导出文件流的更多相关文章
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- aspose.cells根据模板导出excel
又隔十多天没写博客了,最近都在忙项目的事情,公司人事变动也比较大,手头上就又多了一个项目.最近做用aspose.cells根据模板导出excel报价单的功能,顺便把相关的核心记下来,先上模板和导出的效 ...
- .Net NPOI 根据excel模板导出excel、直接生成excel
一.根据Excel模板导出excel 1.导入NPOI.dll 2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...
- 按模板导出Excel
说明:开发环境 vs2012 asp.net mvc4 c# 注意:Excel模板有多个sheet页,导出Excel的时候,同时给多个sheet页填充数据 1.项目结构 3.Excel模板(注意she ...
- POI通过模板导出EXCEL文件
一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...
- apache poi根据模板导出excel
需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; im ...
- Java无模板导出Excel,Apache-POI插件实现
开发环境 jdk 1.8 Maven 3.6 Tomcat 8.5 SpringBoot 2.1.4.RELEASE Apache-POI 3.6 Idea 注意: 我是在现有的基于SpringBoo ...
- NPOI复制模板导出Excel
本人菜鸟实习生一枚,公司给我安排了一个excel导出功能.要求如下:1.导出excel文件有样式要求:2.导出excel包含一个或多个工作表:3.功能做活(我的理解就是excel样式以后可能会变方便维 ...
- poi根据excel模板导出Excel
/****单元格值对象**/public class Cells { /*** * 行 */ private int row; /** * 列 */ private int column; /** * ...
随机推荐
- Java 关键字 static
关键字static作用如下: 1. 为某个基本数据类型或对象分配单一的存储空间. 2. 实现某个属性或方法与类关联.在类被加载后类名可以直接调用静态成员方法(下面简称静态方法)或者访问静态成员变量(下 ...
- sqli-labs Less-11 and Less-12
这关是post注入的世界,post注入就是表单中填好数据通常会被送到服务器,然后由服务器将其发送到它要去的地方(比如,送到一个服务器网关程序中,然后由这个程序对其进行处理). 不显示东西,那么加引号等 ...
- poj1064 Cable master(二分查找,精度)
https://vjudge.net/problem/POJ-1064 二分就相当于不停地折半试. C++AC,G++WA不知为何,有人说C函数ans那里爆int了,改了之后也没什么用. #inclu ...
- Codefoces909E Coprocessor(拓扑排序)
http://codeforces.com/problemset/problem/909/E 由于分了两个queue,所以push的时候可以统一操作,不会影响彼此.两个queue相当于是平等的,只是q ...
- 8、jsのBOM对象与DOM对象
javascript的Bom和Dom对象使我们学习的重点,这篇随笔可以重点阅读 本篇导航: BOM对象 DOM对象 DOM Event(事件) 实例练习 一.BOM对象 1.window对象 所有浏览 ...
- MySql的优化步骤
MySql优化的一般步骤: 1.通过show status 命令了解各种sql的执行效率 SHOW STATUS提供msyql服务器的状态信息 一般情况下,我们只需要了解以”Com”开头的指令 sho ...
- VBV Rate Control
Part 1 <06/05/07 12:08pm> Manao | he is negating a float by printing it, adding a "-" ...
- Python 汉字转拼音
本文参考: Python中文转拼音代码(支持全拼和首字母缩写) 中文中不可以有“()” # -*- coding: utf-8 -*- __version__ = '0.9' __all__ = [& ...
- Velocity日期格式化
1.pom.xml添加依赖 <dependency> <groupId>velocity-tools</groupId> <artifactId>vel ...
- 【前端酷站】分享一个纯 Javascript 的图表库与立体像素风制作~
今天小编为大家推荐一个神奇的酷站.ECharts,一个纯 Javascript 的图表库. 以下是各个几个不错的界面的介绍: 首页:http://echarts.baidu.com/ 在首页有完整的说 ...