vue2 el-table数据转excel

<el-table :data="tableData" height="170" border>
          <el-table-column v-for="column in tableColumns" :prop="column.value" :label="column.label"  :key="column.value" width="180"></el-table-column>
        </el-table>


        <el-button type="primary" @click="exportToExcel">导出到Excel</el-button>
//tableColumns为数组包对象,对象含有label和value键值对

async exportToExcel() {
      if (this.tableData.length == 0) {
        this.$message({
          message: '表格中暂无数据',
          type: 'warning',
          showClose: true,
        })
      } else {
        const excelContent = this.createExcelXML(this.tableData, this.tableColumns);
        const getCurrentDateTimeString = () => {
          const now = new Date();
          const year = now.getFullYear();
          const month = String(now.getMonth() + 1).padStart(2, '0');
          const day = String(now.getDate()).padStart(2, '0');
          const hours = String(now.getHours()).padStart(2, '0');
          const minutes = String(now.getMinutes()).padStart(2, '0');
          const seconds = String(now.getSeconds()).padStart(2, '0');
          return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
        };
        const currentDateTime = getCurrentDateTimeString();
        try {
          const handle = await window.showSaveFilePicker({
            suggestedName: `${currentDateTime}`,//文件名可自定义
            types: [
              {
                description: 'Excel Files',
                accept: { 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx'] }
              }
            ]
          });

          const writableStream = await handle.createWritable();
          await writableStream.write(new Blob([excelContent], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }));
          this.downLoadLoading = true;
          await writableStream.close();
          this.downLoadLoading = false;
          this.$message.success('文件保存成功!');
        } catch (error) {
          console.error('保存文件时出错:', error);
        }
      }
    },
    createExcelXML(data, columns) {
      let xml = `<?xml version="1.0"?>
        <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
          xmlns:o="urn:schemas-microsoft-com:office:office"
          xmlns:x="urn:schemas-microsoft-com:office:excel"
          xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
          xmlns:html="http://www.w3.org/TR/REC-html40">
          <Worksheet ss:Name="Sheet1">
            <Table>`;

      xml += '<Row>';
      columns.forEach(column => {
        xml += `<Cell><Data ss:Type="String">${column.label}</Data></Cell>`;
      });
      xml += '</Row>';

      data.forEach(row => {
        xml += '<Row>';
        columns.forEach(column => {
          xml += `<Cell><Data ss:Type="String">${row[column.value]}</Data></Cell>`;
        });
        xml += '</Row>';
      });

      xml += `</Table></Worksheet></Workbook>`;
      return xml;
    },

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Vue 3中的el-table导出为Excel,你可以使用以下步骤: 1. 首先,你需要安装`xlsx`和`file-saver`包。在终端中运行以下命令: ``` npm install xlsx file-saver ``` 2. 在你的Vue组件中,导入所需的库: ```javascript import XLSX from 'xlsx'; import { saveAs } from 'file-saver'; ``` 3. 创建一个方法来导出表格数据Excel文件: ```javascript exportData() { // 获取表格数据 const tableData = this.$refs.table.data; // 创建一个工作簿 const workbook = XLSX.utils.book_new(); // 创建一个工作表 const worksheet = XLSX.utils.json_to_sheet(tableData); // 将工作表添加到工作簿中 XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); // 将工作簿换为Excel文件的二进制数据 const excelData = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); // 创建一个Blob对象,并保存为Excel文件 const blob = new Blob([excelData], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); saveAs(blob, 'table_data.xlsx'); } ``` 4. 在el-table组件上添加一个导出按钮,并调用`exportData`方法: ```html <el-table ref="table"> <!-- 表格内容 --> </el-table> <el-button @click="exportData">导出为Excel</el-button> ``` 以上代码将会将el-table中的数据导出为名为`table_data.xlsx`的Excel文件。请确保在`<el-table>`标签上设置了ref属性,以便在`exportData`方法中引用表格数据。 这是使用Vue 3和Element Plus的示例,如果你在项目中使用了其他UI库或版本,请相应地调整代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值