亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue項目中如何實現(xiàn)表格選中數(shù)據(jù)的Excel導出

 更新時間:2025年10月09日 08:54:47   作者:芭拉拉小魔仙  
這篇文章主要為大家詳細介紹了Vue項目中如何實現(xiàn)表格選中數(shù)據(jù)的Excel導出功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

一、安裝

npm install xlsx

二、核心代碼

<template>
  <div class="statistics-container">
      <el-button type="primary" @click="handleExportSelected">導出選中</el-button>
      <el-table
        :data="tableData"
        border
        style="width: 100%"
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55" />
        <el-table-column prop="index" label="序號" width="90" />
        <el-table-column prop="nickName" label="昵稱" width="170" />
        <el-table-column prop="username" label="賬號名" width="150" />
      </el-table>
  </div>
</template>

 <script lang="ts" setup>
import * as XLSX from "xlsx";
// 表格數(shù)據(jù)
const tableData = ref([]);

// 選中項
const selectedRows = ref<any[]>([]);
const handleSelectionChange = (val: any[]) => {
  selectedRows.value = val;
};
// 導出選中
const handleExportSelected = () => {
  if (selectedRows.value.length === 0) {
    ElMessage.warning("請先選擇要導出的數(shù)據(jù)");
    return;
  }

  // 準備導出數(shù)據(jù)
  const exportData = selectedRows.value.map((item) => {
    return {
      用戶ID: item.userId,
      客戶昵稱: item.nickName,
      賬號名: item.username,
    };
  });

  // 創(chuàng)建工作簿
  const ws = XLSX.utils.json_to_sheet(exportData);
  const wb = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(wb, ws, "列表數(shù)據(jù)");

  // 導出文件
  const fileName = `列表數(shù)據(jù)_選中_${new Date().getTime()}.xlsx`;
  XLSX.writeFile(wb, fileName);

  ElMessage.success(`成功導出${selectedRows.value.length}條數(shù)據(jù)`);
};
</script>

三、設置表頭樣式、實現(xiàn)列寬自適應

安裝xlsx-js-style,設置單元格樣式

npm install xlsx-js-style

import XLSX from "xlsx-js-style";
// 導出選中
const handleExportSelected = () => {
  if (selectedRows.value.length === 0) {
    ElMessage.warning("請先選擇要導出的數(shù)據(jù)");
    return;
  }

  // 準備導出數(shù)據(jù)
  const exportData = selectedRows.value.map((item) => {
    return {
      用戶ID: item.userId,
      客戶昵稱: item.nickName,
      賬號名: item.username,
    };
  });

  // 創(chuàng)建工作簿
  const ws = XLSX.utils.json_to_sheet(exportData);
  // 設置表頭樣式
  const headerStyle = {
    font: {
      name: "Arial",
      sz: 12,
      bold: true,
      color: { rgb: "000000" },
    },
    fill: {
      fgColor: { rgb: "f3fff1" },
    },
    alignment: {
      horizontal: "center",
      vertical: "center",
    },
    border: {
      top: { style: "thin", color: { rgb: "000000" } },
      bottom: { style: "thin", color: { rgb: "000000" } },
      left: { style: "thin", color: { rgb: "000000" } },
      right: { style: "thin", color: { rgb: "000000" } },
    },
  };

  // 應用表頭樣式
  const range = XLSX.utils.decode_range(ws["!ref"]);

  for (let col = range.s.c; col <= range.e.c; col++) {
    const cell = ws[XLSX.utils.encode_cell({ r: 0, c: col })];
    if (cell) {
      cell.s = headerStyle;
    }
  }

  // 設置列寬自適應
  const colWidths = [];
  for (let col = range.s.c; col <= range.e.c; col++) {
    let maxWidth = 10;
    for (let row = range.s.r; row <= range.e.r; row++) {
      const cell = ws[XLSX.utils.encode_cell({ r: row, c: col })];
      if (cell && cell.v) {
        const cellLength = cell.v.toString().length;
        if (cellLength > maxWidth) {
          maxWidth = cellLength;
        }
      }
    }
    // 限制最大寬度為50,最小寬度為20
    colWidths.push({ wch: Math.min(Math.max(maxWidth + 2, 20), 50) });
  }
  ws["!cols"] = colWidths;

  const wb = XLSX.utils.book_new();
  console.log(ws);

  XLSX.utils.book_append_sheet(wb, ws, "列表數(shù)據(jù)");

  // 導出文件
  const fileName = `列表數(shù)據(jù)_選中_${new Date().getTime()}.xlsx`;
  XLSX.writeFile(wb, fileName);

  ElMessage.success(`成功導出${selectedRows.value.length}條數(shù)據(jù)`);
};

四、效果展示

到此這篇關(guān)于Vue項目中如何實現(xiàn)表格選中數(shù)據(jù)的Excel導出的文章就介紹到這了,更多相關(guān)Vue導出Excel數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue引入cesium問題

    vue引入cesium問題

    這篇文章主要介紹了vue引入cesium問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue分頁器組件編寫方法詳解

    vue分頁器組件編寫方法詳解

    這篇文章主要為大家詳細介紹了vue分頁器組件編寫方法,可設置初始當前頁,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Vue完整項目構(gòu)建(進階篇)

    Vue完整項目構(gòu)建(進階篇)

    這篇文章主要介紹了Vue完整項目構(gòu)建(進階篇)的相關(guān)資料,需要的朋友可以參考下
    2018-02-02
  • Vue 實現(xiàn)定時刷新與自動更新(示例詳解)

    Vue 實現(xiàn)定時刷新與自動更新(示例詳解)

    在現(xiàn)代 Web 開發(fā)中,定時刷新頁面或定時更新數(shù)據(jù)是一種常見的需求,尤其是在需要與服務器進行定時通信或者展示實時數(shù)據(jù)的場景下,Vue.js 提供了簡單而有效的方法來實現(xiàn)定時刷新和自動更新,本文將介紹幾種常見的定時刷新方式、適用場景、優(yōu)缺點以及性能考慮
    2024-11-11
  • vue+elementUI(el-upload)圖片壓縮,默認同比例壓縮操作

    vue+elementUI(el-upload)圖片壓縮,默認同比例壓縮操作

    這篇文章主要介紹了vue+elementUI(el-upload)圖片壓縮,默認同比例壓縮操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue jsx 使用指南及vue.js 使用jsx語法的方法

    vue jsx 使用指南及vue.js 使用jsx語法的方法

    這篇文章主要介紹了vue jsx 使用指南及vue.js 使用jsx語法的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • 詳解Vue-axios 設置請求頭問題

    詳解Vue-axios 設置請求頭問題

    這篇文章主要介紹了Vue-axios 設置請求頭問題,文中給大家提到了axios設置請求頭內(nèi)容的方法,需要的朋友可以參考下
    2018-12-12
  • vue實現(xiàn)文章評論和回復列表

    vue實現(xiàn)文章評論和回復列表

    這篇文章主要為大家詳細介紹了vue實現(xiàn)文章評論和回復列表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 在vue中v-for循環(huán)遍歷圖片不顯示錯誤的解決方案

    在vue中v-for循環(huán)遍歷圖片不顯示錯誤的解決方案

    這篇文章主要介紹了在vue中v-for循環(huán)遍歷圖片不顯示錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Vee-Validate的使用方法詳解

    Vee-Validate的使用方法詳解

    本篇文章主要介紹了Vee-Validate的使用方法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論