当前位置:首页 > 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);
};

前端分页导出:

前端vue实现导入导出

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中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现 安装…

vue实现https

vue实现https

Vue 中实现 HTTPS 的步骤 在 Vue 项目中实现 HTTPS 主要涉及开发环境配置和生产环境部署。以下是具体方法: 开发环境配置(Vue CLI 或 Vite) 使用 mkcert 生成…

vue 实现pdf

vue 实现pdf

在Vue中实现PDF功能 在Vue项目中实现PDF功能通常涉及PDF生成、预览或下载。以下是几种常见实现方式: 使用vue-pdf库预览PDF 安装依赖: npm install vue-pdf…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…

vue实现答题

vue实现答题

Vue 实现答题功能 数据结构设计 使用 Vue 的响应式特性管理题目和答案数据。通常需要以下数据结构: data() { return { questions: [ {…