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,直接导出文件流的更多相关文章

  1. 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的路由方案,与原来的方案在使用上差别不 ...

  2. aspose.cells根据模板导出excel

    又隔十多天没写博客了,最近都在忙项目的事情,公司人事变动也比较大,手头上就又多了一个项目.最近做用aspose.cells根据模板导出excel报价单的功能,顺便把相关的核心记下来,先上模板和导出的效 ...

  3. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  4. 按模板导出Excel

    说明:开发环境 vs2012 asp.net mvc4 c# 注意:Excel模板有多个sheet页,导出Excel的时候,同时给多个sheet页填充数据 1.项目结构 3.Excel模板(注意she ...

  5. POI通过模板导出EXCEL文件

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...

  6. apache poi根据模板导出excel

    需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; im ...

  7. Java无模板导出Excel,Apache-POI插件实现

    开发环境 jdk 1.8 Maven 3.6 Tomcat 8.5 SpringBoot 2.1.4.RELEASE Apache-POI 3.6 Idea 注意: 我是在现有的基于SpringBoo ...

  8. NPOI复制模板导出Excel

    本人菜鸟实习生一枚,公司给我安排了一个excel导出功能.要求如下:1.导出excel文件有样式要求:2.导出excel包含一个或多个工作表:3.功能做活(我的理解就是excel样式以后可能会变方便维 ...

  9. poi根据excel模板导出Excel

    /****单元格值对象**/public class Cells { /*** * 行 */ private int row; /** * 列 */ private int column; /** * ...

随机推荐

  1. R语言语法基础一

    R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...

  2. [原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试),长期有效

    [原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试方向),长期有效 高级测试工程师(性能/自动化方向) 1.负责性能测试计划,性能需求分析,性能测试方案和用例设计,搭建性能测试环境,执 ...

  3. KMSpico 无后门下载

    MDL论坛 Windows Loader https://forums.mydigitallife.net/threads/windows-loader-download.58464/   KMS_V ...

  4. .Net转Java.01.从Main(main)函数说起

    在C#中,main函数的签名可以有四种 static void Main(string[] args)static void Main()static int Main(string[] args)s ...

  5. 演练:调试 Windows 窗体

    Windows 窗体是最常见的托管应用程序之一. Windows 窗体创建标准的 Windows 应用程序. 你可以完成此演练使用 Visual Basic 中, C#,或 c + +. 首先,您必须 ...

  6. PDF.js实现个性化PDF渲染(文本复制)

    我肥来啦

  7. PHP性能分析——xhprof(window 安装xhporf)

    1 下载xhprof的php扩展 因为官方的xhprof不支持php7,所以采用tideways版本的xhprof 下载地址:windows版tideways_xhprof 将windows版的dll ...

  8. 【技能意志矩阵-skill will matrix】工作中究竟是个人能力更重要,还是我们的积极性更能提高我们的业绩?

    工作中究竟是个人能力更重要,还是我们的积极性更能提高我们的业绩? 我们可以通过建立“个人能力(即技能)”和“积极性(即意志)”的矩阵(skill will matrix),找到自己的象限,并根据指导意 ...

  9. 【C#】C#线程_计算限制的异步操作

    目录结构: contents structure [+] 线程池简介 执行上下文(Execution Context) CancelTokenSource的使用 ThreadPool Task和Tas ...

  10. java中random()函数用法介绍

    Random() 创建一个新的随机数生成器.  代码如下 复制代码 Random(long seed) 使用单个 long 种子创建一个新的随机数生成器. 我们可以在构造Random对象的时候指定种子 ...