首页 > 语言 > JavaScript > 正文

Angular Excel 导入与导出的实现代码

2024-05-06 15:40:29
字体:
来源:转载
供稿:网友

前言

本文基于 angular v7.2.7,初次编写于2019-4-17。

虽然代码是基于angular 7.2.7,但是语法是基于 angular 4.X 以上均可使用 。在项目开发过程中,我们经常需要跟后端进行文件交互,常见的诸如 图片上传,excel 导入与导出等。这里我们只讨论关于excel 的导入与导出。

Excel 导入

excel 导入在angular 中其实非常简单,只需要安装 xlsx插件 就可以了。

安装 xlsx 插件

npm install xlsx --save

在component 中导入

import * as XLSX from 'xlsx';

关键代码

import * as XLSX from 'xlsx';excelData = [];importExcel(evt: any) {  /* wire up file reader */  const target: DataTransfer = <DataTransfer>(evt.target);  if (target.files.length !== 1) throw new Error('Cannot use multiple files');  const reader: FileReader = new FileReader();  reader.onload = (e: any) => {   /* read workbook */   const bstr: string = e.target.result;   const wb: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });   /* grab first sheet */   const wsname: string = wb.SheetNames[0];   const ws: XLSX.WorkSheet = wb.Sheets[wsname];   /* save data */   this.excelData = (XLSX.utils.sheet_to_json(ws, { header: 1 }));   evt.target.value = "" // 清空  };  reader.readAsBinaryString(target.files[0]); }

Excel 导出

传统的导出功能我们一般是放在后端实现,由后端生成文件的Url或者文件流给到前端。注:这种是通过浏览器的下载功能直接下载的。一般有以下几种方式实现:

get 请求 + window.open(url)

后端返回一个 文件的url 或者 文件流,这种方式均可以直接下载。 前提是http请求为get 。

post 请求 + <a>标签

前端代码:

exportExcel(codeList: string[]) {  return this.http.post(this.ExportExcelByCodesUrl, codeList, {   responseType: 'arraybuffer',//设置响应类型   observe:"response",//返回response header   headers: { 'Content-Type': 'application/json' }  })   .subscribe((response:any)=>{    this.downLoadFile(response, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8")   }) } /**  * Method is use to download file.  * @param data - Array Buffer data  * @param type - type of the document. */downLoadFile(data: any, type: string) {   var blob = new Blob([data.body], { type: type});   let downloadElement = document.createElement('a');   let href = window.URL.createObjectURL(blob); //创建下载的链接   downloadElement.href = href;   let filename = data.headers.get("Download-FileName");//后端返回的自定义header   downloadElement.download = decodeURI(filename);    document.body.appendChild(downloadElement);   downloadElement.click(); //点击下载   document.body.removeChild(downloadElement); //下载完成移除元素   window.URL.revokeObjectURL(href); //释放掉blob对象 }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选