首页 > 其他分享 >下载模板,从前端到后端

下载模板,从前端到后端

时间:2022-10-25 13:33:56浏览次数:46  
标签:sheet columnNames 前端 模板 new null response 下载 row

前端Vue:

var tempType = "application/msexcel";       this.SearchForm.Type="2";       this.tableHeader.forEach((element)=>{         this.SearchForm.selectHeader.push(element)       });       downLoadTemplate(this.SearchForm).then((response) => {         this.importLoading = false;         if (response.data.request_status == undefined && response.status!=200) {           this.$message.error("没有权限");           return;         }         let blob = new Blob([response.data], {           type: tempType, // word文档为msword,pdf文档为pdf,msexcel 为excel         });         let objectUrl = URL.createObjectURL(blob);         let link = document.createElement("a");         let fname = "导出物料信息.xlsx"; // 下载文件的名字         link.href = objectUrl;         link.setAttribute("download", fname);         document.body.appendChild(link);         link.click();       });

Controller:

try
{

List<Ba_Material> allBa_material = new List<Ba_Material>();//所有物料信息
DataTable datSource = _bll.getMaterialDatatable(model);//所有物料信息
List<tableHeader> tableHeader = model.selectHeader;
List<string> selectEnNameHeader = new List<string>(tableHeader.Select(t => t.EnName).ToList());
selectEnNameHeader.Insert(0,"MaterialId");
List<string> selectCnNameHeader = new List<string>(tableHeader.Select(t => t.CnName).ToList());
selectCnNameHeader.Insert(0,"物料编号");
DataTable datNew = datSource.DefaultView.ToTable(false ,selectEnNameHeader.ToArray());//选中列的数据

string fullPath = FileHelper.MapPath($"/Template/导出物料信息.xlsx");
string sheetName = "物料信息";
// string[] columnNames = { "产品线id", "物料id", "货号", "物料名称", "品牌", "规格", "组合物料", "目录价", "目录价执行日期", "目录价更新日期" };
string[] columnNames = selectCnNameHeader.ToArray();//要显示在excel里的表头
ExcelHelper.ExportExcelTemplate(datNew, fullPath, sheetName, columnNames);//table里的数据写入excel文件
var stream = new FileStream(fullPath, FileMode.Open);
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = "" };
return response;
}
catch (Exception ex)
{
StaticHelper.ErrorLog("模板下载错误信息:" + ex.Message);
throw;
}

ExportExcelTemplate:

/// <summary>
/// 导出Template1Excel
/// </summary>
/// <param name="dt">写入sheet中的数据</param>
/// <param name="FilePath">文件路径</param>
/// <param name="sheetName">sheet名称</param>
/// <param name="columnNames">sheet中列名</param>
public static void ExportExcelTemplate(DataTable dt, string filePath, string sheetName = "", string[] columnNames = null)
{
if (File.Exists(filePath))
{
FileStream file = null;
FileStream sw = null;
IWorkbook workbook = null;
try
{
file = File.OpenRead(filePath);

int row_index = 0;
file.Position = 0;
workbook = new XSSFWorkbook(file);
ISheet sheet = null;
int index = workbook.GetSheetIndex(sheetName);
//存在sheet名称,则删除
if (index > -1)
{
workbook.RemoveSheetAt(index);
}
//新建sheet
sheet = workbook.CreateSheet(sheetName);

IRow row;

row = sheet.CreateRow(row_index);
if (columnNames == null)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
row.CreateCell(j).SetCellValue(dt.Columns[j].Caption.ToString());
}
}
else
{
for (int j = 0; j < columnNames.Length; j++)
{
row.CreateCell(j).SetCellValue(columnNames[j].ToString());
}
}

row = sheet.CreateRow(++row_index);

//写入数据
if (columnNames == null)
{
foreach (DataRow r in dt.Select())
{
for (int j = 0; j < dt.Columns.Count; j++)
{
row.CreateCell(j).SetCellValue(r[j].ToString());
}

row = sheet.CreateRow(++row_index);
}
}
else
{
foreach (DataRow r in dt.Select())
{
for (int j = 0; j < columnNames.Length; j++)
{
row.CreateCell(j).SetCellValue(r[j].ToString());
}
row = sheet.CreateRow(++row_index);
}
}
//保存文档
sw = File.Create(filePath);
workbook.Write(sw);
}
catch (Exception ex)
{}
finally
{
if (workbook != null)
workbook.Close();
if (sw != null)
sw.Dispose();
if (file != null)
file.Dispose();
}
}
}

标签:sheet,columnNames,前端,模板,new,null,response,下载,row
From: https://www.cnblogs.com/WinterSweetFirst/p/16824556.html

相关文章

  • Koa扩展之下载文件和访问HTML页面
    下载文件和访问HTML页面示例PS:在项目的根目录新增static文件夹,static文件夹中包含load.html页面和模板文件.xlsx。constkoa=require('koa');constRouter=require(......
  • 模板库
    2022.10.25:模板库迁移至cnblogs。1.离散化//unordered_map<int,int>b;intb(intx){returnlower_bound(a+1,a+n+1,x)-a;//返回1~r的数}voiddisc......
  • Chrome历史版本下载
    谷歌浏览器历史版本下载:https://mydown.yesky.com/pcsoft/105582038/versions/ ......
  • 从0搭建vue3组件库: 如何完整搭建一个前端脚手架?
    相信大家在前端开发中都使用过很多前端脚手架,如vue-cli,create-vite,create-vue等;本篇文章将会为大家详细介绍这些前端脚手架是如何实现的,并且从零实现一个create-kitty脚手......
  • fcpx插件:Stupid raisins show pop for Mac(20个标题展示模板)
    mac哪款fcpx标题展示插件好用呢?StupidrAIsinsshowpopforMac是一款运行在MacOS平台,搭配FinalCutPro x软件一起使用的标题展示模板。StupidrAIsinsshowpop有20个......
  • 腾讯前端常考vue面试题整理
    什么是mixin?Mixin使我们能够为Vue组件编写可插拔和可重用的功能。如果希望在多个组件之间重用一组组件选项,例如生命周期hook、方法等,则可以将其编写为mixin,并在......
  • 02Vue模板语法
    一、插值语法功能:用于解析标签体内容。写法:{{xxx}},xxx是js表达式,且可以读取到data中的所有属性。二、指令语法功能:用于解析标签(包括:标签属性、标签体内容、绑定事件......
  • 百度前端高频react面试题总结
    可以使用TypeScript写React应用吗?怎么操作?(1)如果还未创建CreateReactApp项目直接创建一个具有typescript的CreateReactApp项目:npxcreate-react-appdemo-......
  • maven的下载、安装、配置,idea中配置Maven
    下载下载链接:点击下载地址;找到:对应版本的包下载安装下载后的压缩包解压出来,然后将解压后的包放到日常安装软件的位置即安装成功,当然取决于个人意愿,也可以不移动......
  • macOS Ventura 13.0 (22A380) 正式版发布,ISO、IPSW、PKG 下载
    macOSVentura13正式版现已发布!请访问原文链接:https://sysin.org/blog/macOS-Ventura/,查看最新版。原创作品,转载请保留出处。macOSVentura13.0正式版于今日(10.25)发......