Excel 表格和 Node.js 实现数据转换工具

news/2025/2/21 10:10:42

这个工具的核心思路是:

  1. 前端:使用 SheetJS (xlsx) 解析和导出 Excel 数据,并提供 UI 进行增删改查。
  2. 后端 (Node.js + Express):处理 Excel 数据的转换、存储,并提供 API 接口。

1. 安装依赖

前端和后端项目分别安装 xlsx 相关依赖。

前端vue

javascript">npm install xlsx

后端 (Node.js + Express)

javascript">npm install express multer xlsx fs

2. 前端实现 (Vue 3 + SheetJS)

前端主要实现:

  • 解析 Excel 文件,并展示为可编辑的表格
  • 提供增删改查操作
  • 处理 Excel 文件的导出

前端代码

javascript"><template>
  <div>
    <input type="file" @change="handleFileUpload" />
    <button @click="exportExcel">导出 Excel</button>
    <table border="1">
      <thead>
        <tr>
          <th v-for="(col, index) in columns" :key="index">{{ col }}</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(row, rowIndex) in tableData" :key="rowIndex">
          <td v-for="(value, colIndex) in row" :key="colIndex">
            <input v-model="tableData[rowIndex][columns[colIndex]]" />
          </td>
          <td>
            <button @click="deleteRow(rowIndex)">删除</button>
          </td>
        </tr>
      </tbody>
    </table>
    <button @click="addRow">添加行</button>
  </div>
</template>

<script setup>
import { ref } from "vue";
import * as XLSX from "xlsx";

const tableData = ref([]);
const columns = ref([]);

// 解析上传的 Excel 文件
const handleFileUpload = (event) => {
  const file = event.target.files[0];
  const reader = new FileReader();

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

    if (parsedData.length) {
      columns.value = Object.keys(parsedData[0]);
      tableData.value = parsedData;
    }
  };

  reader.readAsArrayBuffer(file);
};

// 添加新行
const addRow = () => {
  const newRow = {};
  columns.value.forEach((col) => {
    newRow[col] = "";
  });
  tableData.value.push(newRow);
};

// 删除行
const deleteRow = (index) => {
  tableData.value.splice(index, 1);
};

// 导出 Excel 文件
const exportExcel = () => {
  const worksheet = XLSX.utils.json_to_sheet(tableData.value);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
  XLSX.writeFile(workbook, "table_data.xlsx");
};
</script>

3. 后端实现 (Node.js + Express + Multer)

后端主要实现:

  • 解析 Excel 并转换为 JSON
  • 处理增删改查 API
  • 支持上传和下载 Excel

后端代码

javascript">const express = require("express");
const multer = require("multer");
const fs = require("fs");
const XLSX = require("xlsx");

const app = express();
const upload = multer({ dest: "uploads/" });

app.use(express.json());

// 解析 Excel 并转换为 JSON
app.post("/upload", upload.single("file"), (req, res) => {
  const filePath = req.file.path;
  const workbook = XLSX.readFile(filePath);
  const sheetName = workbook.SheetNames[0];
  const sheet = workbook.Sheets[sheetName];
  const jsonData = XLSX.utils.sheet_to_json(sheet);

  fs.unlinkSync(filePath); // 删除临时文件
  res.json({ data: jsonData });
});

// 导出 Excel
app.get("/export", (req, res) => {
  const sampleData = [
    { Name: "Alice", Age: 25, City: "New York" },
    { Name: "Bob", Age: 30, City: "Los Angeles" },
  ];
  const worksheet = XLSX.utils.json_to_sheet(sampleData);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");

  const filePath = "export.xlsx";
  XLSX.writeFile(workbook, filePath);
  res.download(filePath, () => fs.unlinkSync(filePath)); // 发送后删除
});

app.listen(3000, () => console.log("Server running on port 3000"));

4. 使用方式

前端

  1. 运行 Vue 代码,上传 Excel 文件,进行增删改查,最后导出 Excel。

后端

1.启动后端:

javascript">node server.js

2.访问 /export 进行 Excel 下载。


http://www.niftyadmin.cn/n/5860671.html

相关文章

“深入浅出”系列之C++:(8)libevent 库

libevent 是一个开源的高性能事件通知库&#xff0c;它为处理异步 I/O 事件提供了一个通用的接口。该库采用事件驱动的编程模型&#xff0c;允许开发者在多个 I/O 源&#xff08;如套接字、文件描述符等&#xff09;上监听事件&#xff0c;并在事件发生时执行相应的回调函数。l…

新书速览|Rust汽车电子开发实践

《Rust汽车电子开发实践》 本书内容 《Rust汽车电子开发实践》专注于介绍Rust编程语言在汽车电子领域的应用。随着汽车行业向智能化、电动化和网联化的快速演进&#xff0c;传统的C/C编程语言在内存安全、数据竞争等问题上逐渐显露出局限性。Rust语言以其独特的内存安全保证、…

OpenGL(2)基于Qt做OpenGL开发

文章目录 一、基于Qt做OpenGL开发1、环境准备2、创建OpenGL窗口3、绘制基本图形 一、基于Qt做OpenGL开发 1、环境准备 确保你已经安装了 Qt 开发环境&#xff08;包含 Qt Creator&#xff09;&#xff0c;并且支持 OpenGL 开发。在创建 Qt 项目时&#xff0c;选择 “Qt Widget…

蓝桥杯备赛1-3时间加法

题目描述 现在时间是 aa 点 bb 分&#xff0c;请问 tt 分钟后&#xff0c;是几点几分&#xff1f; 输入描述 输入的第一行包含一个整数 aa。 第二行包含一个整数 bb。 第三行包含一个整数 tt。 其中&#xff0c;0≤a≤23,0≤b≤59,0≤t,t0≤a≤23,0≤b≤59,0≤t,t 分钟后…

Oracle EBS 12.1和APEX 集成时 Apache的配置代理

在有些场景下&#xff0c;apex的前端服务不是和oracle EBS 应用部署在同一个服务器上或者要求apex和访问地址和EBS公用同一个域名同一个端口&#xff0c;那么怎么才能做到用EBS 的域名和端口来实现对apex的访问呢 通过配置代理规则解决&#xff0c;以Oracle EBS 12.1.3 为例&am…

IO模型与NIO基础--NIO网络传输选择器

放进NIO体系进行网络编程的工作流程&#xff1a; Selector的创建 通过调用Selector.open()方法创建一个Selector&#xff0c;如下&#xff1a; Selector selector Selector.open(); 向Selector注册通道 通过Channel.register()方法来实现&#xff0c; 注意&#xff1a;Chan…

微服务入门-笔记

微服务入门-笔记 介绍 这个mvn工程里边包含了微服务里最基础的服务拆分、基于nacos的服务注册和发现、配置中心以及OpenFeign版的远程调用。 初始化这个工程是来源于阿里云的脚手架&#xff0c;https://start.aliyun.com/&#xff0c;从这上边创建一个包含各种依赖的工程&am…

基于MFC实现的键盘电子乐器演奏程序

基于MFC实现的键盘电子乐器演奏程序设计 1.项目简介 需要连接西电微机原理实验室提供的 QTH9054 微机试验箱&#xff0c;使用其蜂鸣器发声&#xff0c;若不连接&#xff0c;程序会直接播放 mp3 文件模拟钢琴声。 请在 release 处下载编译好的 exe 文件运行&#xff0c;如需计…