如何在前端应用中合并多个 Excel 工作簿

如何,前端,应用,合并,多个,excel,工作 · 浏览次数 : 330

小编点评

## Multiple Sheet Merging This document demonstrates how to merge multiple Excel workbooks and display them as a single spreadsheet within your frontend application using SpreadJS. ### Prerequisites * You need to add the following scripts to your HTML page: * `node_modules/@grapecity/spread-sheets/dist/gc.spread.sheets.all.min.js` * `node_modules/@grapecity/spread-excelio/dist/gc.spread.excelio.min.js` * You need to have a file input element named `fileDemo` and a button named `addWorkbook` for file selection. ### Code ```html

Workbooks to merge:

    ``` ### Creating a New SpreadJS Instance ```javascript var hiddenSpreadIndex = -1; var hiddenWorkbooks = new Array(); excelIO = new GC.Spread.Excel.IO(); spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss")); ``` ### Adding Workbooks to the Import List ```javascript function CreateNewSpreadDiv() { var newDiv = document.createElement("LI"); var textNode = document.createTextNode(workbookName); newDiv.appendChild(textNode); document.getElementById("workbookList").appendChild(newDiv); } ``` ### Merging Workbooks ```javascript function MergeWorkbooks() { for (var w = 0; w < hiddenWorkbooks.length; w++) { if (GC.Spread.Sheets.LicenseKey == null) { for (var s = 1; s < hiddenWorkbooks[w].getSheetCount(); s++) { CopySheet(w, s); } } else { for (var s = 0; s < hiddenWorkbooks[w].getSheetCount(); s++) { CopySheet(w, s); } } } spread.removeSheet(0); } ``` ### Copying Sheet Styles ```javascript function CopySheet(workbookIndex, sheetIndex) { spread.addSheet(); var sheetJson = JSON.stringify(hiddenWorkbooks[workbookIndex].getSheet(sheetIndex).toJSON()); spread.suspendPaint(); hiddenWorkbooks[workbookIndex].getNamedStyles().forEach(function (namedStyle) { spread.addNamedStyle(namedStyle); }); spread.getSheet(spread.getSheetCount() - 1).fromJSON(JSON.parse(sheetJson)); spread.resumePaint(); } ``` ### Notes * This code assumes that the workbooks have the same sheet count. * The named styles from the original sheet are copied to the new sheet. * This method only copies styles that are defined in the sheet.

    正文

    本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

    前言|问题背景

      SpreadJS是纯前端的电子表格控件,可以轻松加载 Excel 工作簿中的数据并将它们呈现在前端浏览器应用的网页上。

      在某些情况下,您可能需要将来自多个工作簿的数据(例如,来自不同部门的月度销售报告)合并到一个工作簿中,实现此目的的一种方法是使用多个隐藏的 SpreadJS 实例来加载所有工作簿,然后将它们合并到一个电子表格中。

    此文将向您展示如何合并多个 Excel 工作簿并将它们作为单个电子表格显示在您的前端浏览器应用中。

    设置项目

    要加载 SpreadJS,我们需要添加主要的 JavaScript 库和 CSS 文件。由于还要加载 Excel 文件,因此我们需要添加 ExcelIO JavaScript 库。这可以通过导航到 HTML 文件的位置并使用 NPM 安装 SpreadJS 文件来完成:

    npm i @grapecity/spread-sheets @grapecity/spread-excelio

     

    然后在 HTML 代码中引用这些文件:

    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
    
    <meta charset="utf-8" />
    
    <title>Multiple Sheet Merging</title>
    
    <link href="./node_modules/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css" rel="stylesheet" type="text/css" />
    
    <script type="text/javascript" src="./node_modules/@grapecity/spread-sheets/dist/gc.spread.sheets.all.min.js"></script>
    
    <script type="text/javascript" src="./node_modules/@grapecity/spread-excelio/dist/gc.spread.excelio.min.js"></script>
    
    </head>
    
    </html>

     

    紧接着我们将添加一个 DIV 元素来承载 SpreadJS 实例。

    <body>
    
    <div id="ss" style="width: 800px; height: 700px; border: 1px solid gray"></div>
    
    </body>

     

    我们要添加一些代码来初始化 Spread 实例、ExcelIO 和一个数组来保存隐藏的 Spread 实例,我们将在合并之前使用它来加载所有 Excel 文件:

    var hiddenWorkbooks, hiddenSpreadIndex, excelIO, spread;
    
    window.onload = function () {
    
    hiddenSpreadIndex = -1;
    
    hiddenWorkbooks = new Array();
    
    excelIO = new GC.Spread.Excel.IO();
    
    spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
    
    }

     

    在前端应用中加载 Excel 文件

     

    对于这个页面,我们将添加代码让用户加载任意数量的工作簿,然后单击一个按钮将它们合并为一个并在 SpreadJS 中显示它们。为此,我们可以添加以下 HTML 代码:

    <input type="file" name="files[]" id="fileDemo" accept=".xlsx,.xls" />
    
    <input type="button" id="addWorkbook" value="Add Workbook" onclick="CreateNewSpreadDiv()" />
    
    <div id="workbookListBlock" style="display:none">
    
    <p>Workbooks to merge:</p>
    
    <ul id="workbookList"></ul>
    
    <input type="button" id="mergeWorkbooks" value="Merge Workbooks" onclick="MergeWorkbooks()" />
    
    </div>

     

    用户点击文件输入选择一个文件,然后点击“添加工作簿”按钮。这将创建一个新的隐藏 DIV 元素来保存将用于临时加载 Excel 文件的 SpreadJS 实例,并将它们添加到隐藏工作簿列表中:

    function CreateNewSpreadDiv() {
    
    hiddenSpreadIndex++;
    
    var newDiv = document.createElement("div");
    
    newDiv.style.cssText = "display:none; width: 800px; height: 600px; border: 1px solid gray";
    
    newDiv.id = "hiddenWorkbook" + hiddenSpreadIndex;
    
    document.body.appendChild(newDiv);
    
    var hiddenWorkbook = new GC.Spread.Sheets.Workbook(document.getElementById(newDiv.id));
    
    hiddenWorkbooks.push(hiddenWorkbook);
    
    AddWorkbookToImportList();
    
    }

     

    然后,该函数使用 ExcelIO 代码调用另一个函数将 Excel 文件加载到隐藏的 Spread 实例中:

    function AddWorkbookToImportList() {
    
    var excelFile = document.getElementById("fileDemo").files[0];
    
    excelIO.open(excelFile, function (json) {
    
    var workbookObj = json;
    
    hiddenWorkbooks[hiddenSpreadIndex].fromJSON(workbookObj);
    
    AddWorkbookNameElement(document.getElementById("fileDemo").files[0].name);
    
    document.getElementById("fileDemo").value = "";
    
    }, function (e) {
    
    console.log(e);
    
    });
    
    }

     

    为了向用户提供反馈,我们将显示他们将要合并的文件列表,此处显示为“AddWorkbookNameElement”函数:

    function AddWorkbookNameElement(workbookName) {
    
    if (document.getElementById("workbookListBlock").style.display == "none") {
    
    document.getElementById("workbookListBlock").style.display = "block";
    
    }
    
    var newDiv = document.createElement("LI");
    
    var textNode = document.createTextNode(workbookName);
    
    newDiv.appendChild(textNode);
    
    document.getElementById("workbookList").appendChild(newDiv);
    
    }

     

    在前端应用中合并 Excel 文件

    在 JavaScript 中合并 Excel XLSX 文件

    当用户准备好最终将所有工作簿合并为一个时,他们可以单击“合并工作簿”按钮,将每个工作簿中的每个工作表复制到页面上可见的 SpreadJS 实例:

    function MergeWorkbooks() {
    
    for (var w = 0; w < hiddenWorkbooks.length; w++) {
    
    if (GC.Spread.Sheets.LicenseKey == null) {
    
    for (var s = 1; s < hiddenWorkbooks[w].getSheetCount(); s++) {
    
    CopySheet(w, s);
    
    }
    
    } else {
    
    for (var s = 0; s < hiddenWorkbooks[w].getSheetCount(); s++) {
    
    CopySheet(w, s);
    
    }
    
    }
    
    }
    
    spread.removeSheet(0);
    
    }
    
    function CopySheet(workbookIndex, sheetIndex) {
    
    spread.addSheet();
    
    var sheetJson = JSON.stringify(hiddenWorkbooks[workbookIndex].getSheet(sheetIndex).toJSON());
    
    spread.suspendPaint();
    
    hiddenWorkbooks[workbookIndex].getNamedStyles().forEach(function (namedStyle) {
    
    spread.addNamedStyle(namedStyle);
    
    });
    
    spread.getSheet(spread.getSheetCount()-1).fromJSON(JSON.parse(sheetJson));
    
    spread.resumePaint();
    
    }

     

    需要注意的一件事:如果您的工作簿正在使用命名样式,则需要将此样式添加到可见的 SpreadJS实例中,否则它将无法正确显示,因为我们正在复制单个工作表。这显示在上面的函数中,可以添加到“spread.addNamedStyle()”。

    添加该代码后,您现在可以加载多个 Excel 工作簿并使用 SpreadJS 将它们合并为一个。想要尝试该功能或查看 SpreadJS 的其他惊人功能,可前往葡萄城官网立即下载试用版!

    扩展阅读:

    盘点Excel中的那些有趣的“bug”

    SpreadJS:一款类Excel开发工具,功能涵盖Excel的 95% 以上

    SpreadJS在服务器端导入导出Excel

     

     

    与如何在前端应用中合并多个 Excel 工作簿相似的内容:

    如何在前端应用中合并多个 Excel 工作簿

    本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言|问题背景 SpreadJS是纯前端的电子表格控件,可以轻松加载 Excel 工作簿中的数据并将它们呈现在前端浏览器应用的网页上。 在某些情况下,您可能需要将来自多

    以前端视角,漫谈「云端」

    当今世界,云计算技术在快速发展,不断为我们带来新的应用场景和解决方案。作为一名前端开发者,了解云技术并掌握如何在前端中应用它们是必不可少的。本篇文章将介绍云计算技术的基本概念,并从前端角度探讨如何使用云技术提高应用的可扩展性、安全性、性能和用户体验。

    Vue微前端架构与Qiankun实践理论指南

    这篇文章介绍了微前端架构概念,聚焦于如何在Vue.js项目中应用Qiankun框架实现模块化和组件化,以达到高效开发和维护的目的。讨论了Qiankun的原理、如何设置主应用与子应用的通信,以及如何解决跨域问题和优化集成过程,从而实现前端应用的灵活扩展与组织。

    Vue 3深度探索:自定义渲染器与服务端渲染

    这篇文章介绍了如何在Vue框架中实现自定义渲染器以增强组件功能,探讨了虚拟DOM的工作原理,以及如何通过SSR和服务端预取数据优化首屏加载速度。同时,讲解了同构应用的开发方式与状态管理技巧,助力构建高性能前端应用。

    如何使用前端表格控件实现多数据源整合?

    前言 作为表格产品的典型应用场景之一,几乎所有的行业都会存在类 Excel 报表开发这样的应用场景,而在这些应用场景中,经常会遇见下面的这些痛点: 报表数据往往来自多个不同的数据源,需要报表系统能够同时连接多个数据源,并融合不同的数据格式 实际的报表中需要对数据结果进行逻辑计算,例如销售的环比和同比

    基于腾讯元器搭建前端小助手

    通过本文,我们了解了如何利用腾讯元器搭建一个前端助手智能体。通过使用插件和观察其使用效果,我们可以发现前端助手在解决问题和提供帮助方面的潜力。这个前端助手可以成为我们在前端开发过程中的得力助手,帮助我们提高工作效率和解决难题。随着智能技术的不断进步,我们可以期待前端助手在未来发展中的更多功能和应用。

    如何优化 Vue.js 应用程序

    单页面应用(SPAs)当处理实时、异步数据时,可以提供丰富的、可交互的用户体验。但它们也可能很重,很臃肿,而且性能很差。在这篇文章中,我们将介绍一些前端优化技巧,以保持我们的Vue应用程序相对精简,并且只在需要的时候提供必需的JS。 注意:这里假设你对Vue和Composition API有一定的熟

    如何实现Excel中的多级数据联动

    > 摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:[葡萄城官网](https://www.grapecity.com.cn/),葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 ## 前言 在类Excel表格应用中,常用的需求场景是根据单元格之间的数据联动,例如选择某个

    微前端中实现沙箱环境的方案调研

    前言 在微前端实践过程中有一个必然会遇到的问题:全局作用域变量的污染问题,具体来说就是window对象挂载数据会被主子应用获取和修改导致数据相互污染问题,这时候如果能在应用之间做个数据隔离,最好能实现一个沙箱环境,对解决问题很有帮助。 iframe方案 说到沙箱隔离,首先想到的是iframe,自带数

    五分钟k8s入门到实战-应用配置

    背景 在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了。 现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发。 首先就是 ConfigMap,从它的名字也可以看出这是用于管理配置的对象。 ConfigMap 不管