当前位置:首页 > VUE

前端vue实现导入导出

2026-01-21 15:03:54VUE

Vue 实现 Excel 导入功能

安装依赖库 xlsx 和 file-saver:

npm install xlsx file-saver --save

创建导入组件模板:

<input type="file" @change="handleFileChange" accept=".xlsx, .xls" />

实现导入逻辑:

import * as XLSX from 'xlsx';

methods: {
  handleFileChange(e) {
    const files = e.target.files;
    if (!files || files.length === 0) return;

    const file = files[0];
    const reader = new FileReader();

    reader.onload = (e) => {
      const data = new Uint8Array(e.target.result);
      const workbook = XLSX.read(data, { type: 'array' });
      const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
      const jsonData = XLSX.utils.sheet_to_json(firstSheet);

      // 处理导入数据
      this.processImportData(jsonData);
    };

    reader.readAsArrayBuffer(file);
  },

  processImportData(data) {
    // 数据转换和处理逻辑
    console.log('导入数据:', data);
  }
}

Vue 实现 Excel 导出功能

创建导出方法:

import * as XLSX from 'xlsx';
import FileSaver from 'file-saver';

methods: {
  exportToExcel() {
    const data = this.exportData; // 要导出的数据

    const worksheet = XLSX.utils.json_to_sheet(data);
    const workbook = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');

    const excelBuffer = XLSX.write(workbook, {
      bookType: 'xlsx',
      type: 'array'
    });

    const blob = new Blob([excelBuffer], { type: 'application/octet-stream' });
    FileSaver.saveAs(blob, 'export.xlsx');
  }
}

高级功能实现

自定义表头映射:

const headerMap = {
  id: 'ID',
  name: '姓名',
  age: '年龄'
};

function mapHeaders(data) {
  return data.map(item => {
    const newItem = {};
    Object.keys(headerMap).forEach(key => {
      newItem[headerMap[key]] = item[key];
    });
    return newItem;
  });
}

大数据量分片处理:

function chunkExport(data, chunkSize = 10000) {
  for (let i = 0; i < data.length; i += chunkSize) {
    const chunk = data.slice(i, i + chunkSize);
    this.exportChunk(chunk, i/chunkSize + 1);
  }
}

常见问题解决方案

处理日期格式:

function formatDate(cell) {
  if (cell.t === 'n' && cell.v < 1) {
    return XLSX.SSF.format('yyyy-mm-dd', cell.v);
  }
  return cell.w;
}

中文乱码处理:

const blob = new Blob(
  [String.fromCharCode(0xFEFF), excelBuffer],
  { type: 'application/vnd.ms-excel;charset=utf-8' }
);

性能优化建议

使用 Web Worker 处理大数据:

// worker.js
self.importScripts('https://cdn.jsdelivr.net/npm/xlsx@0.17.0/dist/xlsx.full.min.js');

self.onmessage = function(e) {
  const data = e.data;
  const worksheet = XLSX.utils.json_to_sheet(data);
  postMessage(worksheet);
};

前端分页导出:

function paginatedExport(data, pageSize = 5000) {
  const pages = Math.ceil(data.length / pageSize);

  for (let page = 1; page <= pages; page++) {
    const chunk = data.slice((page-1)*pageSize, page*pageSize);
    this.exportToExcel(chunk, `data_page_${page}.xlsx`);
  }
}

前端vue实现导入导出

标签: vue
分享给朋友:

相关文章

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { -…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&g…

vue懒加载实现难吗

vue懒加载实现难吗

vue懒加载的实现难度 Vue懒加载的实现并不复杂,核心逻辑是通过动态导入(Dynamic Imports)和路由配置或组件异步加载完成。以下是具体实现方法: 路由懒加载实现 在Vue Router…

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div c…

vue实现通知

vue实现通知

Vue 实现通知功能的方法 使用 Vue 实现通知功能可以通过多种方式实现,以下是一些常见的方法: 使用 Vue 的全局事件总线 在 Vue 中可以通过事件总线实现通知功能。创建一个全局事件总线,…