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

这个工具的核心思路是:

  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 下载。

相关推荐
加班是不可能的,除非双倍日工资1 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi1 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip2 小时前
vite和webpack打包结构控制
前端·javascript
excel2 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国3 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼3 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy3 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
ZXT3 小时前
promise & async await总结
前端
Jerry说前后端3 小时前
RecyclerView 性能优化:从原理到实践的深度优化方案
android·前端·性能优化
画个太阳作晴天3 小时前
A12预装app
linux·服务器·前端