原生js实现下载导出Excel两种方式

思路:获取数据、重构数据、导出表格,vue也可以使用,原理一样;

注:base64();方法不能忘

   function getUserList(){
        $.ajax({
            url:"",
            type:"",
            data:{},
            dataType:"json",
            contentType:"application/json; charset=utf-8",
            async:false,
            success:function(request){
                let arr = [];
                for (let k = 0; k < request.data.length; k++) {
                    arr.push([  //将需要导出的数据重新构造新数组
                        request.data[k].name,
                        request.data[k].sex,
                        request.data[k].phone,
                    ])
                }
                const jsonData = arr;
                let str = "<tr><td>姓名</td><td>性别</td><td>电话</td></tr>";
                //循环遍历,每行加入tr标签,每个单元格加td标签
                for(let i = 0 ; i < jsonData.length ; i++ ){
                    str+='<tr>';
                    for(let item in jsonData[i]){
                        if(jsonData[i][item] == null){
                        str+=`<td> </td>`;
                        }else{
                        //增加\t为了不让表格显示科学计数法或者其他格式
                        str+=`<td>${ jsonData[i][item] + '\t'}</td>`;
                        }
                    }
                    str+='</tr>';
                }
                //Worksheet名
                let worksheet = '列表'
                let uri = 'data:application/vnd.ms-excel;base64,';
            
                //下载的表格模板数据
                let template = `<html xmlns:o="urn:schemas-microsoft-com:office:office" 
                xmlns:x="urn:schemas-microsoft-com:office:excel" 
                xmlns="http://www.w3.org/TR/REC-html40">
                <head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
                    <x:Name>${worksheet}</x:Name>
                    <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>
                    </x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
                    </head><body><table>${str}</table></body></html>`;
                //下载模板
                window.location.href = uri + base64(template)
            }
        });
    }
    function base64(){
        return window.btoa(unescape(encodeURIComponent(s)))
    }

第二种:使用插件 xlsx.full.min.js

代码:

// 下载地址 https://github.com/SheetJS/js-xlsx/tree/master/dist
// 导入 xls插件  
// 构造导出数据
// 导出
setXlsData(ret){
   let now = new Date();
   let time = now.getFullYear() + "-" +((now.getMonth()+1)<10?"0":"")+(now.getMonth()+1)+"-"+((now.getDate()-1)<10?"0":"")+(now.getDate()-1);
   var arr = []
   for(var i = 0; i < ret.length; i++){
      arr.push({
          "产品":ret[i].pcode,
          "计划量":ret[i].pnum,
          "数量":ret[i].fnum,
      })
   }
   setTimeout(() => {
       this.setExcel(time,arr)
   }, 1000);
 },
 setExcel(date,arr){
    var ws = XLSX.utils.json_to_sheet(arr);/* 新建空workbook,然后加入worksheet */
    var wb = XLSX.utils.book_new();/*新建book*/
    XLSX.utils.book_append_sheet(wb, ws, "sheet1");/* 生成xlsx文件(book,sheet数据,sheet命名) */
    XLSX.writeFile(wb, date+"统计.xlsx");/*写文件(book,xlsx文件名称)*/
 },

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 使用第三方库 可以使用第三方库如`xlsx`或`exceljs`来实现Excel文件的上传与下载功能,它们提供了丰富的API来操作Excel文件,可以轻松地读取和写入Excel文件。 例如,使用`xlsx`库来读取Excel文件: ```javascript import XLSX from 'xlsx'; const file = e.target.files[0]; const reader = new FileReader(); reader.onload = (e) => { const data = e.target.result; const workbook = XLSX.read(data, { type: 'binary' }); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); console.log(jsonData); }; reader.readAsBinaryString(file); ``` 2. 使用原生JavaScript 使用原生JavaScript也可以实现Excel文件的上传与下载功能。可以使用`FormData`对象来上传文件,然后使用`XMLHttpRequest`对象来发送请求并下载文件。 例如,使用原生JavaScript来上传Excel文件: ```javascript const fileInput = document.querySelector('#file-input'); const uploadBtn = document.querySelector('#upload-btn'); uploadBtn.addEventListener('click', () => { const file = fileInput.files[0]; const formData = new FormData(); formData.append('file', file); const xhr = new XMLHttpRequest(); xhr.open('POST', '/upload'); xhr.send(formData); }); ``` 使用原生JavaScript来下载Excel文件: ```javascript const downloadBtn = document.querySelector('#download-btn'); downloadBtn.addEventListener('click', () => { const xhr = new XMLHttpRequest(); xhr.open('GET', '/download'); xhr.responseType = 'blob'; xhr.onload = () => { const a = document.createElement('a'); const url = window.URL.createObjectURL(xhr.response); a.href = url; a.download = 'data.xlsx'; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); }; xhr.send(); }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值