前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >前端必读:如何在 JavaScript 中使用SpreadJS导入和导出 Excel 文件

前端必读:如何在 JavaScript 中使用SpreadJS导入和导出 Excel 文件

作者头像
葡萄城控件
发布于 2022-10-04 13:10:30
发布于 2022-10-04 13:10:30
4.2K00
代码可运行
举报
运行总次数:0
代码可运行

JavaScript在前端领域占据着绝对的统治地位,目前更是从浏览器到服务端,移动端,嵌入式,几乎所有的所有的应用领域都可以使用它。技术圈有一句很经典的话“凡是能用JavaScript实现的东西,最后都会用JavaScript实现”。 Excel 电子表格自 1980 年代以来一直为各行业所广泛使用,至今已拥有超过3亿用户,大多数人都熟悉 Excel 电子表格体验。许多企业在其业务的各个环节中使用了 Excel 电子表格进行数据管理

在本博客中,我们将介绍如何按照以下步骤在 JavaScript 中,实现页面端电子表格导入/导出到 Excel: 完整Demo示例请点击此处下载。

  1. 设置 JavaScript 电子表格项目
  2. 添加 Excel 导入代码
  3. 将数据添加到导入的 Excel 文件
  4. 添加迷你图
  5. 添加 Excel 导出代码

设置 JavaScript 电子表格项目

首先,我们可以使用托管在 NPM 上的 SpreadJS 文件。为此,我们可以使用命令行参数进行安装。打开命令提示符并导航到应用程序的位置。在那里,您可以使用一个命令安装所需的文件。

在这种情况下,我们需要基本的 Spread-Sheets 库、Spread-ExcelIO 和 jQuery

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i @grapecity/spread-sheets @grapecity/spread-excelio jquery

SpreadJS 不依赖于 jQuery,但在这种情况下,我们使用它来提供简单的跨域请求支持,稍后我们将对其进行回顾。

一旦安装了这些,我们就可以在我们的代码中添加对这些脚本和 CSS 文件的引用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>  
<html>  
<head>  
    <title>SpreadJS ExcelIO</title>
    <script src="./node_modules/jquery/dist/jquery.min.js" type="text/javascript"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2014-11-29/FileSaver.min.js"></script>

    <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>  
<body>  
    <div id="ss" style="height:600px; width :100%; "></div>  
</body>  
</html>  

除了 SpreadJS 和 jQuery 文件之外,我们还需要导入 FileSaver 库,为了便于后续程序处理,SpreadJS默认提供完整的文件流,FileSaver库可以用来把文件流转成文件下载到本地。

然后我们可以在页面中添加一个脚本来初始化 Spread.Sheets 组件和一个 div 元素来包含它(因为 SpreadJS 电子表格组件使用了一个画布,这是初始化组件所必需的):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <script type="text/javascript">  
        $(document).ready(function () {  
            var workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));  
        });  
    </script>  
</head>  
<body>  
    <div id="ss" style="height:600px ; width :100%; "></div>  
</body>

添加 Excel 导入代码

我们需要创建一个客户端 ExcelIO 组件的实例,我们可以使用它来打开文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var excelIO = new GC.Spread.Excel.IO();

然后我们需要添加一个函数来导入文件。在此示例中,我们导入了一个本地文件,但您可以对服务器上的文件执行相同的操作。如果从服务器导入文件,您需要引用该位置。下面是一个输入元素的示例,用户可以在其中输入文件的位置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="text" id="importUrl" value="http://www.testwebsite.com/files/TestExcel.xlsx" style="width:300px" />

一旦你有了它,你可以直接在脚本代码中访问该值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var excelUrl = $("#importUrl").val();

导入函数的以下代码使用“excelUrl”变量的本地文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function ImportFile() {  
    var excelUrl = "./test.xlsx";  

    var oReq = new XMLHttpRequest();  
    oReq.open('get', excelUrl, true);  
    oReq.responseType = 'blob';  
    oReq.onload = function () {  
        var blob = oReq.response;  
        excelIO.open(blob, LoadSpread, function (message) {  
            console.log(message);  
        });  
    };  
    oReq.send(null);  
}  
function LoadSpread(json) {  
    jsonData = json;  
    workbook.fromJSON(json);  

    workbook.setActiveSheet("Revenues (Sales)");  
}  

无论您是在服务器上还是在本地引用文件,都需要在 $(document).ready 函数内的脚本中添加以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).ready(function () {  
    $.support.cors = true;  
    workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));  
    //...  
});  

在这种情况下,我们需要启用 Cross-Origin-Request-Support,因为我们可能会从 URL 加载文件。因此 $.support.cors = true;行,否则尝试加载它会导致 CORS 错误。

将数据添加到导入的 Excel 文件

我们使用本教程的“损益表”Excel 模板导入本地文件。

现在我们可以使用 Spread.Sheets 脚本在这个文件中添加另一个收入行。让我们在页面上添加一个按钮来执行此操作: Add Revenue

我们可以为该按钮的单击事件处理程序编写一个函数来添加一行并从前一行复制样式以准备添加一些数据。要复制样式,我们需要使用 copyTo 函数并传入:

  1. 原始和目标行和列索引
  2. 行数和列数
  3. 样式的 CopyToOptions 值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.getElementById("addRevenue").onclick = function () {  
    var sheet = workbook.getActiveSheet();  
    sheet.addRows(newRowIndex, 1);  
    sheet.copyTo(10, 1, newRowIndex, 1, 1, 29, GC.Spread.Sheets.CopyToOptions.style);  
}

以下用于添加数据和 Sparkline 的脚本代码将包含在此按钮单击事件处理程序中。对于大部分数据,我们可以使用 setValue 函数。这允许我们通过传入行索引、列索引和值来在 Spread 中的工作表中设置值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sheet.setValue(newRowIndex, 1, "Revenue 8");  
for (var c = 3; c < 15; c++) {  
    sheet.setValue(newRowIndex, c, Math.floor(Math.random() * 200) + 10);  
}  

最后,我们可以再次使用 copyTo 函数将先前行中的公式复制到 R 到 AD 列的新行,这次使用 CopyToOptions.formula:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sheet.copyTo(10, 17, newRowIndex, 17, 1, 13, GC.Spread.Sheets.CopyToOptions.formula);  

添加迷你图

现在,我们可以添加迷你图来匹配其他数据行。为此,我们需要提供一系列单元格以从中获取数据以及迷你图的一些设置。在这种情况下,我们可以指定:

  1. 单元格的范围,我们只是将数据添加到
  2. 使迷你图看起来像同一列中的其他迷你图的设置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var data = new GC.Spread.Sheets.Range(11, 3, 1, 12);  
var setting = new GC.Spread.Sheets.Sparklines.SparklineSetting();  
setting.options.seriesColor = "Text 2";  
setting.options.lineWeight = 1;  
setting.options.showLow = true;  
setting.options.showHigh = true;  
setting.options.lowMarkerColor = "Text 2";  
setting.options.highMarkerColor = "Text 1";  

之后,我们调用 setSparkline 方法并指定:

  1. 迷你图的位置
  2. 数据的位置
  3. 迷你图的方向
  4. 迷你图的类型
  5. 我们创建的设置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sheet.setSparkline(11, 2, data, GC.Spread.Sheets.Sparklines.DataOrientation.horizontal, GC.Spread.Sheets.Sparklines.SparklineType.line, setting);  

如果您现在尝试运行代码,它可能看起来有点慢,因为每次更改数据和添加样式时工作簿都会重新绘制。为了显着加快速度并提高性能,Spread.Sheets 提供了暂停绘画和计算服务的能力。让我们在添加一行及其数据之前添加代码以暂停两者,然后在之后恢复两者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
workbook.suspendPaint();  
workbook.suspendCalcService();  
//...  
workbook.resumeCalcService();  
workbook.resumePaint();  

添加该代码后,我们可以在 Web 浏览器中打开该页面,并查看 Excel 文件加载到 Spread.Sheets 中并添加了收入行。重要提示:请记住,出于安全考虑,Chrome 不允许您打开本地文件,因此您需要使用 Firefox 等网络浏览器才能成功运行此代码。或者,从网站 URL 加载文件应该可以在任何浏览器中正常打开。

添加 Excel 导出代码

最后,我们可以添加一个按钮来导出包含添加行的文件。为此,我们可以使用 Spread.Sheets 中内置的客户端 ExcelIO 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function ExportFile() {  
    var fileName = $("#exportFileName").val();  
    if (fileName.substr(-5, 5) !== '.xlsx') {  
        fileName += '.xlsx';  
    }  
    var json = JSON.stringify(workbook.toJSON());  

    excelIO.save(json, function (blob) {  
        saveAs(blob, fileName);  
    }, function (e) {  
        if (e.errorCode === 1) {  
            alert(e.errorMessage);  
        }  
    });  
}  

该代码从 exportFileName 输入元素获取导出文件名。我们可以定义它并让用户像这样命名文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="text" id="exportFileName" placeholder="Export file name" value="export.xlsx" />  

然后我们可以添加一个按钮来调用这个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button id="export">Export File</button>  
document.getElementById("export").onclick = function () {  
    ExportFile();  
}  

添加收入行后,您可以使用“导出文件”按钮导出文件。确保添加 FileSaver 外部库以允许用户将文件保存在他们想要的位置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2014-11-29/FileSaver.min.js"></script>  

成功导出文件后,您可以在 Excel 中打开它,并查看文件与导入时的外观相同,只是现在我们添加了额外的收入行。

这只是一个示例,说明如何使用 SpreadJS JavaScript 电子表格将数据添加到 Excel 文件,然后使用简单的 JavaScript 代码将它们导出回 Excel。

在另一个系列文章中,我们演示了如何在其他 Javascript 框架中导入/导出 Excel 电子表格:

  • React
  • Vue
  • Angular

本文示例下载地址: https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjMzMzU3fGU0NTJlZWEyfDE2NjM3MjYyNTl8NjI2NzZ8OTk3MTg%3D

更多纯前端表格在线demo示例 :https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html 纯前端表格应用场景:https://www.grapecity.com.cn/developer/spreadjs#scenarios 移动端示例(可扫码体验):http://demo.grapecity.com.cn/spreadjs/mobilesample/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何使用JavaScript导入和导出Excel文件
JavaScript是一个涵盖多种框架、直译式、可以轻松自定义客户端的脚本语言,在 Web 应用程序中,更加易于编码和维护。而Excel 作为一款深受用户喜爱的电子表格工具,借助其直观的界面、出色的计算性能和图表工具,已经成为数据统计领域不可或缺的软件之一。
葡萄城控件
2019/07/11
6.7K0
如何使用JavaScript导入和导出Excel文件
前端必读3.0:如何在 Angular 中使用SpreadJS实现导入和导出 Excel 文件
在之前的文章中,我们为大家分别详细介绍了在JavaScript、React中使用SpreadJS导入和导出Excel文件的方法,作为带给广大前端开发者的“三部曲”,本文我们将为大家介绍该问题在Angular中的实现。 Excel 电子表格自 1980 年代以来一直为各行业所广泛使用,至今已拥有超过3亿用户,大多数人都熟悉 Excel 电子表格体验。许多企业在其业务的各个环节中使用了 Excel 电子表格进行预算和规划。 通常情况下,刚开始时我们的业务流程中的数据简单,也不涉及复杂的格式和数据关系。但随着组织的发展,可能很难不开始依赖 Excel 的功能。
葡萄城控件
2022/10/04
1.8K0
前端必读3.0:如何在 Angular 中使用SpreadJS实现导入和导出 Excel 文件
如何使用 JavaScript 导入和导出 Excel
在现代的Web应用开发中,与Excel文件的导入和导出成为了一项常见而重要的任务。无论是数据交换、报告生成还是数据分析,与Excel文件的交互都扮演着至关重要的角色。本文小编将为大家介绍如何在熟悉的电子表格 UI 中轻松导入 Excel 文件,并以编程方式修改表格或允许用户进行编辑,最后使用葡萄城公司的纯前端表格控件SpreadJS组件它们导出回 Excel 文件。
葡萄城控件
2024/03/27
5850
如何使用 JavaScript 导入和导出 Excel
前端必读2.0:如何在React 中使用SpreadJS导入和导出 Excel 文件
最近我们公司接到一个客户的需求,要求为正在开发的项目加个功能。项目的前端使用的是React,客户想添加具备Excel 导入/导出功能的电子表格模块。 经过几个小时的原型构建后,技术团队确认所有客户需求文档中描述的功能都已经实现了,并且原型可以在截止日期前做好演示准备。但是,在跟产品组再次讨论客户需求时,我们发现之前对有关电子表格的部分理解可能存在偏差。 客户的具体需求点仅仅提到支持双击填报、具备边框设置、背景色设置和删除行列等功能,但这部分需求描述不是很明确,而且最后提到“像Excel的类似体验”,我们之前忽略了这句话背后的信息量。经过与客户的业务需求方的直接沟通,可以确认终端用户就是想直接在网页端操作Excel,并且直接把编辑完成的表格以Excel的格式下载到本地。
葡萄城控件
2022/10/04
6K0
前端必读2.0:如何在React 中使用SpreadJS导入和导出 Excel 文件
如何在前端应用中合并多个 Excel 工作簿
SpreadJS是纯前端的电子表格控件,可以轻松加载 Excel 工作簿中的数据并将它们呈现在前端浏览器应用的网页上。
葡萄城控件
2023/10/11
3050
如何在前端应用中合并多个 Excel 工作簿
如何使用 Blazor 框架在前端浏览器中导入和导出 Excel
Blazor 是一个相对较新的框架,用于构建具有 .NET 强大功能的交互式客户端 Web UI。一个常见的用例是将现有的 Excel 文件导入 Blazor 应用程序,将电子表格数据呈现给用户,并且能够允许进行任何更改,最后将该数据导出回 Excel 文件或将其保存到数据库。
葡萄城控件
2023/10/11
3850
如何使用 Blazor 框架在前端浏览器中导入和导出 Excel
只需3 分钟,就能创建一个SpreadJS的Vue项目
SpreadJS纯前端表格控件 V11.2(SP2)版本已经全面支持了Vue拓展,下面我们看下如何配合VUE CLI,只需3分钟快速构建一个SpreadJS Vue工程。
葡萄城控件
2018/09/25
2.2K0
从服务端生成Excel电子表格(Node.js+SpreadJS)
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,通常用于创建网络应用程序。它可以同时处理多个连接,并且不像其他大多数模型那样依赖线程。
葡萄城控件
2022/05/09
3.3K0
从服务端生成Excel电子表格(Node.js+SpreadJS)
表格技术七十二变|手把手教你用Canvas电子表格做电子签名
日常生活工作学习中,大家对电子表格必定不陌生。从工作数据汇总分析到出门收据各种电子发票,这些都是由电子表格制作出来的。
葡萄城控件
2021/08/13
2.2K0
表格技术七十二变|手把手教你用Canvas电子表格做电子签名
从服务端生成Excel电子表格(GcExcel + SpreadJS)
在服务端生成Excel电子表格,除了使用 Node.js + SpreadJS 外,葡萄城官方推荐使用 SpreadJS + GcExcel。该方案不仅能够解决批量绑定数据源并导出Excel、批量修改大量Excel内容及样式、服务端批量打印以及生成PDF文档等需求,还提供了远超行业标准的组件性能。
葡萄城控件
2022/05/09
8350
从服务端生成Excel电子表格(GcExcel + SpreadJS)
SpreadJS使用进阶指南 - 使用 NPM 管理你的项目
前言 SpreadJS作为一款性能出众的纯前端电子表格控件,自2015年发布以来,已经被广泛应用于各领域“在线Excel”数据管理项目中。NPM,作为管理Node.js库最有力的手段,解决了很多NodeJS代码部署的问题。 如今,为让您更方便的使用产品和更好地管理项目中的SpreadJS代码,我们已将SpreadJS应用打包发布到了NPM服务器。如您需要,请点击查看(需要FQ) NPM简介 也许您刚刚接触前端开发,或者刚刚使用NodeJS。NPM对于您来说,可能会感到些许陌生。这里,是NPM的简单介绍,希望
葡萄城控件
2018/07/05
2.3K0
Vuex与前端表格施展“组合拳”,实现大屏展示应用的交互增强
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
葡萄城控件
2022/09/23
1.4K0
Vuex与前端表格施展“组合拳”,实现大屏展示应用的交互增强
Redux与前端表格施展“组合拳”,实现大屏展示应用的交互增强
Redux 是 JavaScript 状态容器,提供可预测化的状态管理。它可以用在 react、angular、vue 等项目中, 但与 react 配合使用更加方便一些。
葡萄城控件
2023/01/13
1.7K0
Redux与前端表格施展“组合拳”,实现大屏展示应用的交互增强
创建 SpreadJS Blazor 组件
数据(包括股票、天气和体育比分)在不断更新为新信息时最为有用。比较通用的 JavaScript 电子表格组件,可以轻松地使用、显示并通过数据绑定提供实时数据更新。
葡萄城控件
2023/05/23
2K0
创建 SpreadJS Blazor 组件
【图解】Web前端实现类似Excel的电子表格
本文将通过图解的方式,使用纯前端表格控件 SpreadJS 来一步一步实现在线的电子表格产品(例如可构建Office 365 Excel产品、Google的在线SpreadSheet)。 工具简介:
葡萄城控件
2018/01/10
9.3K0
【图解】Web前端实现类似Excel的电子表格
高效处理报表,掌握原生JS打印和导出报表为PDF的顺畅技巧!
在日常工作中,报表打印和导出为PDF是经常要处理的任务之一。除了方便我们将信息传达给同事和客户外,还可以让工作看起来更加专业、漂亮和规范,从而赢得领导和客户的信任和支持。作为一名工作者,掌握高效的报表处理技巧对提高工作效率至关重要。其中,原生JS打印和导出报表为PDF技巧是一种非常实用、高效且普遍使用的方式。使用原生JS技巧,可以轻松完成报表处理的任务,避免使用繁琐的第三方库和软件,从而节省时间和金钱。掌握原生JS打印和导出报表为PDF技巧并不需要很高的前端开发技能,只需一些JS基础和DOM操作基础。本文将向您介绍如何使用原生JS技巧打印和导出报表为PDF,并帮助解决在处理报表时可能遇到的问题和困难。
葡萄城控件
2023/10/11
3680
高效处理报表,掌握原生JS打印和导出报表为PDF的顺畅技巧!
如何在浏览器中导入Excel表格插件(上)
  作为一名优秀的打工人,Excel是大家上班中必不可少的办公软件。随着互联网时代的到来,越来越多的公司开始使用各种B/S系统来处理表格数据文件。那么有没有一种可以直接在浏览器中使用的Excel插件去处理数据呢?答案是肯定的。本文小编将为大家介绍如何在Vue框架中集成SpreadJS在线表格插件(以下简称为“SpreadJS”)和在线表格编辑器(类Excel浏览器插件)实现在浏览器中使用Excel插件来处理数据。
葡萄城控件
2023/10/11
3760
提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件
Chrome插件,官方名称extensions(扩展程序);为了方便理解,以下都称为插件。 我们开发的插件需要在浏览器里面运行,打开浏览器,通过右上角的三个点(自定义及控制)-更多工具-拓展程序-打开开发者模式。点击"加载已解压的拓展程序,选择项目文件夹,就可将开发中的插件加载进来。 插件是基于Web技术构建的,例如HTML、JavaScript和CSS。它们在单独的沙盒执行环境中运行并与Chrome浏览器进行交互。插件允许我们通过使用API修改浏览器行为和访问Web内容来扩展和增强浏览器的功能。 相信使用Chrome(谷歌浏览器)的小伙伴们都在用Chrome扩展插件(Chrome Extension),类似一键翻译、批量下载网页图片、OneTab、甚至大名鼎鼎的 ”油猴” 等。
葡萄城控件
2022/10/31
3.4K0
提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件
如何开发一款基于 vite+vue3 的在线表格系统(下)
在上篇内容中我们为大家分享了详细介绍Vue3和Vite的相关内容。在本篇中我们将从项目实战出发带大家了解Vite+Vue3 的在线表格系统的构建。 使用Vite初始化Vue3项目 在这里需要注意:根据官网文档说明,使用Vite需要node版本在12以上,请在创建项目前检查node版本
葡萄城控件
2022/09/22
1.2K0
如何开发一款基于 vite+vue3 的在线表格系统(下)
如何在浏览器中导入Excel表格插件(下)
  作为一名优秀的打工人,Excel是大家上班中必不可少的办公软件。随着互联网时代的到来,越来越多的公司开始使用各种B/S系统来处理表格数据文件。那么有没有一种可以直接在浏览器中使用的Excel插件去处理数据呢?答案是肯定的。本文小编将为大家介绍如何在Vue框架中集成在线表格插件(以下简称为“SpreadJS”)和在线表格编辑器(类Excel浏览器插件)实现在浏览器中使用Excel插件来处理数据。
葡萄城控件
2023/10/11
3690
如何在浏览器中导入Excel表格插件(下)
推荐阅读
相关推荐
如何使用JavaScript导入和导出Excel文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文