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; /** * ...
随机推荐
- 道路 [NOIP模拟]
Description 我们看见了一个由 m 行 n 列的 1*1 的格子组成的矩阵,每个格子(I,j)有对应的高度 h[i][j]和初始的一个非负权值 v[i][j].我们可以随便选择一个格子作为起 ...
- 一个label两种颜色,一个label两种字体
-(void)addLabel{ UILabel *label = [[UILabel alloc]init]; label.backgroundColor = [UIColor grayColor] ...
- 一个封装不错的 TcpClient 类
using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading; nam ...
- ES6_入门(1)_let命令
1. let声明变量只在let命令所在的代码区内有效. "use strict"; /*如果不加"use strict";会报错:Uncaught Syntax ...
- JS膏集01
JS膏集01 1.动态页面: 向服务器发送请求,服务器那边没有页面,动态生成后,返回给客户端 由html/css/js组成. js还不是面向对象的语言,是基于对象的语言.js中没有类的概念,js的继承 ...
- window Form中使用Font Awesome z
图标字体是矢量的,矢量图意味着每个图标都能在所有大小的屏幕上完美呈现,可以随时更改大小和颜色,而且不失真,真心给人一种“高大上”的感觉.由于Font Awesome是完全免费的,无论个人还是商业使用, ...
- MYSQL千万级数据量的优化方法积累
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- SOFABolt 源码分析
SOFABolt 是一个轻量级.高性能.易用的远程通信框架,基于netty4.1,由蚂蚁金服开源. 本系列博客会分析 SOFABolt 的使用姿势,设计方案及详细的源码解析.后续还会分析 SOFABo ...
- 工厂模式 Factory MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- vue-cli使用sockjs即时通信
基于webSocket通信的库主要有 socket.io,SockJS,这次用的是 SockJS. 这里我们使用sockjs-client.stomjs这两个模块,要实现webSocket通信,需要后 ...