首页 > 其他分享 >前端实现xlsx文件的读取并网页编辑,结合exceljs和x-data-spreadsheet,参考

前端实现xlsx文件的读取并网页编辑,结合exceljs和x-data-spreadsheet,参考

时间:2025-01-06 23:21:52浏览次数:1  
标签:xlsx const exceljs spreadsheet zh data row

1. 安装依赖

确保你已经安装了 x-data-spreadsheetexceljs,以及中文语言包:

npm install x-data-spreadsheet exceljs

或者

yarn add x-data-spreadsheet exceljs

2. 导入和配置 x-data-spreadsheet

在你的 Vue 组件中,正确导入 x-data-spreadsheet 和中文语言包,并设置语言为中文(简体)。

<template>
  <div>
    <input type="file" @change="onFileChange" accept=".xlsx, .xls"/>
    <div ref="spreadsheet" style="height: 600px;"></div>
    <button @click="saveFile">下载修改后的文件</button>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';
import Spreadsheet from 'x-data-spreadsheet';
import 'x-data-spreadsheet/dist/xspreadsheet.css';
import * as ExcelJS from 'exceljs';
import zhCN from 'x-data-spreadsheet/dist/locale/zh-cn'; // 导入中文语言包

export default {
  setup() {
    const spreadsheet = ref(null);

    onMounted(() => {
      // 设置语言为中文(简体)
      Spreadsheet.locale('zh-cn', zhCN);

      // 初始化 x-data-spreadsheet
      const ss = new Spreadsheet(spreadsheet.value, {
        lang: 'zh-cn', // 确保这里也设置为 'zh-cn'
        rowHeight: 30,
        colWidth: 100,
        menu: false, // 禁用默认菜单
        toolbar: true, // 启用工具栏
        view: {
          showGrid: true,
        },
      });

      // 将实例保存到 this 上下文中以便后续使用
      Object.assign(this, { ss });
    });

    const onFileChange = async (e) => {
      const file = e.target.files[0];
      if (file) {
        const workbook = new ExcelJS.Workbook();
        await workbook.xlsx.load(file.arrayBuffer());

        // 假设我们只处理第一个工作表
        const worksheet = workbook.worksheets.get(0);
        const data = [];

        worksheet.eachRow((row, rowNumber) => {
          const rowData = [];
          row.eachCell((cell, colNumber) => {
            rowData.push(cell.text);
          });
          data.push(rowData);
        });

        // 更新 x-data-spreadsheet 的数据源
        this.ss.loadData({
          sheet1: {
            name: 'Sheet1',
            data: data.map((row, rowIndex) => row.map((cell, colIndex) => ({
              value: cell,
              style: {
                textAlign: 'center',
                verticalAlign: 'middle'
              }
            }))),
          }
        });
      }
    };

    const saveFile = () => {
      const data = this.ss.getData().sheet1.data;

      const workbook = new ExcelJS.Workbook();
      const worksheet = workbook.addWorksheet('Sheet1');

      data.forEach((row, rowIndex) => {
        row.forEach((cell, colIndex) => {
          worksheet.getCell(colIndex + 1, rowIndex + 1).value = cell.value;
        });
      });

      // 导出 XLSX 文件
      workbook.xlsx.writeBuffer().then((buffer) => {
        const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
        const url = window.URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = 'modified_file.xlsx';
        a.click();
        window.URL.revokeObjectURL(url);
      });
    };

    return {
      onFileChange,
      saveFile,
      spreadsheet
    };
  }
};
</script>

<style>
/* 引入 x-data-spreadsheet 的样式 */
@import 'x-data-spreadsheet/dist/xspreadsheet.css';
</style>

3. 运行你的应用

确保你已经正确设置了 Vue 项目,并且所有依赖都已正确安装。然后运行你的应用,你应该能够看到一个文件上传按钮,选择一个 XLSX 文件后,文件内容会显示在 x-data-spreadsheet 中供编辑。编辑完成后,点击“下载修改后的文件”按钮即可保存更改后的 XLSX 文件。

注意事项

  • 语言设置:通过 Spreadsheet.locale('zh-cn', zhCN); 设置语言为中文(简体),并在初始化 x-data-spreadsheet 时确保 lang 选项也设置为 'zh-cn'
  • 样式和配置x-data-spreadsheet 提供了丰富的配置选项,可以根据需要自定义表格的行为和外观。例如,你可以启用或禁用菜单、工具栏、网格线等。
  • 性能优化:对于大型文件或复杂的工作簿,考虑在服务器端进行处理以优化性能。
  • 许可证:如果你的项目是商业用途,请确保你有合法的许可证来使用 x-data-spreadsheetExcelJS

通过这种方式,你可以确保 x-data-spreadsheet 使用中文(简体)界面,提供更好的用户体验。同时,结合 ExcelJS 处理 XLSX 文件的读取和写入,可以实现完整的网页编辑功能。

标签:xlsx,const,exceljs,spreadsheet,zh,data,row
From: https://www.cnblogs.com/jocongmin/p/18656506

相关文章

  • 在 Vue 3 项目中使用 `exceljs` 库来读取 `.xlsx` 文件
    在Vue3项目中使用exceljs库来读取.xlsx文件,你需要遵循以下步骤:1.安装依赖首先,你需要安装exceljs和file-saver(用于保存文件,如果你也需要写入功能的话)。你可以通过npm或yarn来安装这些包。npminstallexceljsfile-saver或者yarnaddexceljsfile-saver2.......
  • 【记录一下】修改sWorksheetGrid(fpspreadsheet)标题
    如何修改sWorksheetGrid(fpspreadsheet)标题?这是网友"海"从lazarus论坛找到的答案(fpSpreadSheet标题和可见列): procedureTForm1.sWorksheetGrid1GetColHeaderText(Sender:TObject;AIndex:Integer;varAText:String);begincaseAIndexof0:AText:='';......
  • Pandas教程之三十五:XlsxWriter使用详解(2)
    Python|使用Pandas和XlsxWriter|集合–2PythonPandas是一个数据分析库。它可以读取、过滤和重新排列小型和大型数据集,并以包括Excel在内的多种格式输出它们。Pandas使用XlsxWriter模块写入Excel文件。XlsxWriter是一个用于以XLSX文件格式写入文件的Pyth......
  • Vue3 - 最新实现在线预览Excel文件(xls/xlsx)多种方案,解析打开excel电子表格支持服务
    前言如果您需要Vue2版本,请访问这篇文章。在vue3项目开发中,详解实现预览excel表格功能,在浏览器中直接打开xls/xlsx文件并渲染效果,vue3预览excel文件教程,文件来源可以是在线url地址、前端调用api接口获取文件流(先下载)等,预览方式可以新开浏览器页签或者自定义弹框等......
  • Vue2 - 最新详细实现在线预览Excel文件(xls/xlsx)多种方案,解析打开excel电子表格支持
    前言如果您需要Vue3版本,请访问。在vue2|nuxt2项目开发中,详解实现预览excel表格功能,在浏览器中直接打开xls/xlsx文件并渲染效果,文件来源可以是在线url地址、前端调用api接口获取文件流(先下载)等,预览方式可以新开浏览器页签或者自定义弹框等方式,兼容任意高低版本浏......
  • 【原创】将fpspreadsheet的TsWorksheetGrid选择的Cell拷贝为图片
    网友有个很特别的需求:将xlsx文件选定的单元格复制为图形,然后粘贴到其他单元格以保持复制的单元格不变形,需要用execl可以完成这个任务,我选择fpspreadsheet来解决这个问题。TsWorksheetGrid选择的Cell拷贝为图片。已知问题:超出可视范围复制会存在错位的问题。 复制粘贴后: 直......
  • 【QT】使用Qxlsx读取Excel单元格中函数表达式的结果值
    【QT】使用Qxlsx读取Excel单元格中函数表达式的结果值零、起因是这样的,目前朋友托我写一款模板生成软件,任务是先把他写的程序文件复制一份出来,然后再根据Excel中对应位置的单元格的值,修改程序文件副本中的某些文件。对于读Excel的需求,经过测试,最终选择Qxlsx这款开源QT组件来读取......
  • python之Excel操作库XlsxWriter
    github: https://github.com/jmcnamara/XlsxWriter PythonXlsxWriter是一个用于创建Excel2007+XLSX文件的库,它提供了简单易用的接口,使得开发者可以轻松地生成Excel文件,并且支持多种高级功能,如格式设置、图表绘制、数据透视表等。XlsxWriter与Excel文件的兼容性非常......
  • Andorid+Java使用Apache POI库实现doc、docx、xls、xlsx的读取和写入
    1、前言 最近要用AndroidStudio和Java实现多种文件的导入和读取,包括常见的文本文件txt、doc、docx、xls和xlsx。其中txt用输入输出流操作即可。经过搜索查找,确定了使用ApachePOI库进行其余文件类型的读写。在此记录从开始在apache官网上下载导入包后尝试读取doc便报错,到打......
  • pandas读取xlsx文件使用sqlachemy写到数据库
    pandas读取xlsx文件使用sqlachemy写到数据库要使用pandas和SQLAlchemy将Excel文件中的数据读取到数据库中,你可以按照以下步骤进行操作:安装必要的库:确保你已经安装了pandas、SQLAlchemy和openpyxl(用于读取Excel文件)。可以使用以下命令安装:pipinstallpandas......