当前位置:首页 > 工具 > 正文内容

基于Vue3与Luckysheet实现Excel文件在线预览方案

访客 工具 2026年7月15日 1

通过npm方式集成Luckysheet组件,版本配置为"luckysheet": "^2.1.13"与"xlsx": "^0.18.5"。安装命令如下:

npm install luckysheet xlsx

在项目入口文件中添加资源引用:

<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <link rel="icon" href="/favicon.ico">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!-- Luckysheet资源加载 -->
  <link href="https://cdn.jsdelivr.net/npm/luckysheet@2.1.13/dist/css/luckysheet.css" rel="stylesheet">
  <link href="https://cdn.jsdelivr.net/npm/luckysheet@2.1.13/dist/plugins/css/pluginsCss.css" rel="stylesheet">
  <link href="https://cdn.jsdelivr.net/npm/luckysheet@2.1.13/dist/plugins/plugins.css" rel="stylesheet">
  <link href="https://cdn.jsdelivr.net/npm/luckysheet@2.1.13/dist/assets/iconfont/iconfont.css" rel="stylesheet">
  <title>Excel在线预览</title>
</head>
<body>
  <div id="app">
    <input type="file" @change="onFileSelect" accept=".xlsx,.xls,.csv" />
    <div id="sheet-container" style="width:100%;height:600px;"></div>
  </div>
  <script src="/node_modules/luckysheet/dist/plugins/js/plugin.js"></script>
  <script src="/node_modules/luckysheet/dist/luckysheet.umd.js"></script>
  <script type="module" src="/src/main.ts"></script>
</body>
</html>

文件上传处理组件:

<template>
  <div>
    <input type="file" @change="onFileSelect" accept=".xlsx,.xls,.csv" />
    <div id="sheet-container" style="width:100%;height:600px;"></div>
  </div>
</template>

<script setup>
import { onMounted } from 'vue';
import * as XLSX from 'xlsx';

let sheetEditor = null;

const onFileSelect = async (e) => {
  const file = e.target.files[0];
  if (!file) return;
  
  // 清理旧实例
  if (sheetEditor) {
    try {
      sheetEditor.destroy();
    } catch (err) {
      console.error('销毁实例异常:', err);
    }
  }

  const reader = new FileReader();
  reader.onload = (evt) => {
    try {
      parseData(evt.target.result, file.name);
    } catch (err) {
      console.error('数据解析失败:', err);
    }
  };
  reader.onerror = () => {
    console.error('文件读取异常:', reader.error);
  };
  
  // 按文件类型选择读取方式
  if (file.name.endsWith('.csv')) {
    reader.readAsText(file, 'UTF-8');
  } else {
    reader.readAsArrayBuffer(file);
  }
};

const parseData = (data, filename) => {
  let workbook;
  if (filename.endsWith('.csv')) {
    const csvContent = XLSX.utils.aoa_to_sheet(data);
    const csvStr = XLSX.utils.sheet_to_csv(csvContent);
    workbook = XLSX.read(csvStr, {type: 'string'});
  } else {
    workbook = XLSX.read(data, {type: 'array'});
  }

  const config = {
    container: 'sheet-container',
    title: filename,
    data: [],
    lang: 'zh',
    showtoolbar: true,
    allowEdit: false,
    showinfobar: false,
    showformula: false,
    showcontextmenu: false,
    showbottombar: false
  };

  workbook.SheetNames.forEach(sheetName => {
    const sheet = workbook.Sheets[sheetName];
    const rows = XLSX.utils.sheet_to_json(sheet, {header:1});
    
    config.data.push({
      name: sheetName,
      celldata: formatCellData(rows)
    });
  });

  try {
    sheetEditor = window.luckysheet.create(config);
  } catch (err) {
    console.error('初始化异常:', err);
  }
};

const formatCellData = (data) => {
  return data.flatMap((row, r) =>
    row.map((cell, c) => ({
      r: r,
      c: c,
      v: cell
    }))
  );
};

onMounted(() => {
  // 初始化时可添加默认数据
});
</script>

标签: Vue3

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。