vue前端实现导出,文字居中可修改样式哦(宽高等)如此简单~~

16 篇文章 0 订阅

1.安装依赖

npm install --save xlsx file-saver
npm install --save xlsx-style

2.哪个页面使用哪个页面引入

import FileSaver from "file-saver";
import XLSX2 from "xlsx";
import XLSX from "xlsx-style";

3.效果图(可以实现多表头,也可以实现单行表头)

4.页面表格需要有id(element iview都可以)

 <Table :columns="columns13" :data="data5" id='mytable' border></Table>

还需要一个按钮  

<span @click="setExport2Excel()">导出</span>

5.下面数据写在data里面   也可以改成你自己需要的数据

 columns13: [
                    {
                        title: 'Date',
                        key: 'date',
                        resizable: true,
                        width: 180
                    },
                    {
                        title: 'Name',
                        key: 'name',
                        resizable: true,
                        width: 180
                    },
                    {
                        title: 'Age',
                        key: 'age',
                        resizable: true,
                        width: 180
                    },
                    {
                        title: 'Address',
                        key: 'address'
                    }
                ],
                data5: [
                    {
                        name: 'John Brown',
                        age: 18,
                        address: 'New York No. 1 Lake Park',
                        date: '2016-10-03'
                    },
                    {
                        name: 'Jim Green',
                        age: 24,
                        address: 'London No. 1 Lake Park',
                        date: '2016-10-01'
                    },
                    {
                        name: 'Joe Black',
                        age: 30,
                        address: 'Sydney No. 1 Lake Park',
                        date: '2016-10-02'
                    },
                    {
                        name: 'Jon Snow',
                        age: 26,
                        address: 'Ottawa No. 2 Lake Park',
                        date: '2016-10-04'
                    }
                ]

 6 .下面方法写在 methods 里面

  setExport2Excel() {
      /* generate workbook object from table */
      var wb = XLSX2.utils.table_to_sheet(document.querySelector("#mytable")); //mytable为表格的id名
      console.log(wb)
      for (var i = 0; i < 11; i++) {
        wb["!cols"][i] = {
          wpx: 130,
        };
      }
      // 样式的文档地址
      // https://www.npmjs.com/package/xlsx-style
      for (const key in wb) {
        if (key.indexOf("!") === -1 && wb[key].v) {
          wb[key].s = {
            font: {
              //字体设置
              sz: 13,
              bold: false,
              color: {
                rgb: "000000", //十六进制,不带#
              },
            },
            alignment: {
              //文字居中
              horizontal: "center",
              vertical: "center",
              wrap_text: true,
            },
            border: {
              // 设置边框
              top: {
                style: "thin",
              },
              bottom: {
                style: "thin",
              },
              left: {
                style: "thin",
              },
              right: {
                style: "thin",
              },
            },
          };
        }
      }
      var data = this.addRangeBorder(wb["!merges"], wb); //合并项添加边框
      // 暂无筛选结果   (这个位置 如果导出之后页面出现无名数据,这个暂无筛选结果,就是我写的时候的无名数据,莫名其妙就出现了,把这个不需要的,替换掉我的文字即可)
      for(let i in data){
        console.log(data[i].v)
        if(data[i].v == '暂无筛选结果') delete data[i]
      }
      var filedata = this.sheet2blob(data);
      this.openDownloadDialog(filedata,"日收统计.xlsx");
    },
    //为合并项添加边框
    addRangeBorder(range, ws) {
      let arr = [
        "A",
        "B",
        "C",
        "D",
        "E",
        "F",
        "G",
        "H",
        "I",
        "J",
        "K",
        "L",
        "M",
        "N",
        "O",
        "P",
        "Q",
        "R",
        "S",
        "T",
        "U",
        "V",
        "W",
        "X",
        "Y",
        "Z",
      ];

      // range.forEach((item) => {
      //   let startColNumber = Number(item.s.r),
      //     endColNumber = Number(item.e.r);
      //   let startRowNumber = Number(item.s.c),
      //     endRowNumber = Number(item.e.c);
      //   const test = ws[arr[startRowNumber] + (startColNumber + 1)];
      //   for (let col = startColNumber; col <= endColNumber; col++) {
      //     for (let row = startRowNumber; row <= endRowNumber; row++) {
      //       ws[arr[row] + (col + 1)] = test;
      //     }
      //   }
      // });
      return ws;
    },
    //将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
    sheet2blob(sheet, sheetName) {
      sheetName = sheetName || "sheet1";
      var workbook = {
        SheetNames: [sheetName],
        Sheets: {},
      };
      workbook.Sheets[sheetName] = sheet; // 生成excel的配置项

      var wopts = {
        bookType: "xlsx", // 要生成的文件类型
        bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
        type: "binary",
      };
      var wbout = XLSX.write(workbook, wopts);
      var blob = new Blob([s2ab(wbout)], {
        type: "application/octet-stream",
      }); // 字符串转ArrayBuffer
      function s2ab(s) {
        var buf = new ArrayBuffer(s.length);
        var view = new Uint8Array(buf);
        for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
        return buf;
      }
      return blob;
    },
    openDownloadDialog(url, saveName) {
      if (typeof url == "object" && url instanceof Blob) {
        url = URL.createObjectURL(url); // 创建blob地址
      }
      var aLink = document.createElement("a");
      aLink.href = url;
      aLink.download = saveName || ""; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
      var event;
      if (window.MouseEvent) event = new MouseEvent("click");
      else {
        event = document.createEvent("MouseEvents");
        event.initMouseEvent(
          "click",
          true,
          false,
          window,
          0,
          0,
          0,
          0,
          0,
          false,
          false,
          false,
          false,
          0,
          null
        );
      }
      aLink.dispatchEvent(event);
    },

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue导出Excel文件并使文字上下左右居中的方法如下: 1. 首先,我们需要安装并引入一个Excel库,比如 `xlsx` 或 `exceljs`。 2. 创建一个Vue组件,该组件用于导出Excel文件。在模板中,添加一个按钮,并在按钮的点击事件中触发导出Excel的函数。 3. 在Vue组件的方法中,编写导出Excel的函数。首先,创建一个工作簿对象,并添加一个工作表。然后,根据需求添加表头和数据。 4. 对于表头和数据,我们需要设置样式。在xlsx库中,可以通过给单元格设置样式实现文本的上下左右居中。可以使用该库的 `utils` 模块的 `aoa_to_sheet` 函数创建一个Excel工作表对象。 5. 在单元格样式中,设置 `alignment` 属性的 `vertical` 和 `horizontal` 值为 `'center'`,实现文本的上下左右居中。 6. 最后,使用工作簿的 `write` 方法将工作表保存到Excel文件中,并将文件下载到本地。 以下是一个简单的示例代码: ```vue <template> <div> <button @click="exportToExcel">导出Excel</button> </div> </template> <script> import XLSX from 'xlsx'; export default { methods: { exportToExcel() { const workbook = XLSX.utils.book_new(); const worksheet = XLSX.utils.aoa_to_sheet([ ['姓名', '年龄'], ['张三', 20], ['李四', 25] ]); // 设置表头样式 const headerStyle = { alignment: { vertical: 'center', horizontal: 'center' } }; worksheet['!cols'] = [{ wch: 10 }, { wch: 10 }]; // 设置列 worksheet['!rows'] = [{ hpt: 20 }]; // 设置行高 // 设置数据样式 const dataStyle = { alignment: { vertical: 'center', horizontal: 'center' } }; // 设置表头和数据样式 XLSX.utils.sheet_set_cell_style(worksheet, 'A1', headerStyle); XLSX.utils.sheet_set_cell_style(worksheet, 'B1', headerStyle); XLSX.utils.sheet_set_cell_style(worksheet, 'A2', dataStyle); XLSX.utils.sheet_set_cell_style(worksheet, 'B2', dataStyle); XLSX.utils.sheet_set_cell_style(worksheet, 'A3', dataStyle); XLSX.utils.sheet_set_cell_style(worksheet, 'B3', dataStyle); XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); XLSX.writeFile(workbook, 'example.xlsx'); } } } </script> ``` 这样,当点击按钮时,Vue导出一个名为 `example.xlsx` 的Excel文件,其中的文本会上下左右居中。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值