百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

基于SpreadJS实现的Chrome Excel扩展,一个提升工作效率的神器!

zhezhongyun 2025-01-31 16:16 59 浏览

相信使用Chrome(谷歌浏览器)的小伙伴们都在用Chrome扩展插件(Chrome Extension),类似一键翻译、批量下载网页图片、OneTab、甚至大名鼎鼎的“油猴” 等。

但是有时候,我们需要一些Chrome应用市场上没有的特定功能的插件,例如任务提醒、报表自动生成、与内部数据系统交互的数据分析或上传下载等。

SpreadJS 是一款基于 HTML5 的纯前端电子表格控件,兼容 450 种以上的 Excel 公式,凭借其 “高性能、跨平台、与 Excel 高度兼容”的产品特性,备受以华为、苏宁易购、天弘基金等为代表的企业用户青睐。SpreadJS 为用户带来亲切的 Excel 使用体验的同时,满足 Web Excel 组件开发、表格文档协同编辑、数据填报、Excel 类报表设计等业务场景,极大降低了企业研发成本和项目交付风险。

SpreadJS官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网

SpreadJS 是纯前端的,可以和Chrome扩展插件完美结合,轻松地把Excel的能力集成到Chrome中,实现效果惊人的插件应用。接下来咱们就花30分钟时间,一起写一个展示待办任务的浏览器插件(想获取本文的完整Demo,请咨询“在线客服”获取):

首先在package.json文件中引入SpreadJS相关依赖文件。

{

"dependencies": {

"\@grapecity/spread-excelio": "15.2.0",

"\@grapecity/spread-sheets": "15.2.0",

"\@grapecity/spread-sheets-resources-zh": "15.2.0"

}

}

其次创建SpreadJS容器。在manifest.json文件中,可以配置点击插件图标时弹出的小窗口的页面。这里配置了index.html页面。

接着我们在index.html中创建SpreadJS的目标DOM元素:

创建容器之后,就可以初始化SpreadJS了。在GC.Spread.Sheets.Workbook构造函数中,有两个参数。第一个参数是宿主dom元素或者id,这里是‘ss’。第二个参数是初始化选项。这里设置了三个值: sheetCount、scrollbarMaxAlign、newTabVisible;分别表示表单数量,滚动条与活动表单的最后一行和最后一列对齐,不显示新增表单选项。

window.onload = function () {

var spread = new GC.Spread.Sheets.Workbook("ss",{ sheetCount: 1,
scrollbarMaxAlign:true, newTabVisible:false });

};

获取SpreadJS对象后,就可以进行绑定数据、进行数据展示啦。首先可以为其绑定列,自定义表头,根据列名设置宽度,根据内容设置数据格式或者单元格类型等。这时候可以定义帖子标题,发帖时间,是否金牌用户、地区等等信息。

var sheet = spread.getActiveSheet();

var colInfos = [

{name: "帖子标题", displayName: "帖子标题", size: 300},

{

name: "发帖时间",

displayName: "发帖时间",

size: 100,

formatter: "MM-dd hh:mm",

},

{

name: "city",

displayName: "地区",

cellType: ColorArea

},

];

sheet.autoGenerateColumns = false;

sheet.bindColumns(colInfos);

其次通过XMLHttpRequest获取任务列表数据,获取数据后,可以进行表单数据绑定。

var xhr = new XMLHttpRequest();

xhr.open("GET",url,true);

xhr.onreadystatechange = function () {

> if (xhr.readyState == 4) {

> var resp = JSON.parse(xhr.responseText);

> if (resp instanceof Array) {

> sheet.setDataSource(resp);

> }

}}

xhr.send();

绑定数据后还可以为其添加筛选、排序等功能。如为其筛选区域。如想查看北方区所有的论坛帖子,就可以在sheet表单第9列为其绑定筛选条件。

var condition =new GC.Spread.Sheets.ConditionalFormatting.Condition(

GC.Spread.Sheets.ConditionalFormatting.ConditionType.textCondition,

{compareType: GC.Spread.Sheets.ConditionalFormatting.TextCompareType .contains,

expected: "\*北方区\*",} );

sheet.rowFilter().addFilterItem(9, condition);

sheet.rowFilter().filter(9);

sheet.rowFilter().filterButtonVisible(true);

其结果如下图所示:

根据条件规则设置样式

sheet.conditionalFormats.addSpecificTextRule(

GC.Spread.Sheets.ConditionalFormatting.TextComparisonOperators.contains,

"未处理",style1,ranges);

sheet.conditionalFormats.addSpecificTextRule(

GC.Spread.Sheets.ConditionalFormatting.TextComparisonOperators.contains,

"处理中", style2,ranges);

以上代码分别为"未处理"与"处理中"赋值不同样式。这样子可以很醒目看到论坛帖子处理状态。其结果如下所示:

利用SpreadJS可以导出Excel的特性,可以将当前sheet导出到Excel中。

在导出Excel前,要通过toJSON获取其序列化数据。这时候要注意序列化选项:将includeBindingSource设置为true。

columnHeadersAsFrozenRows设置为true。

var serializationOption = {

includeBindingSource: true,

columnHeadersAsFrozenRows: true,

};

var json = spread.toJSON(serializationOption);

在序列化成功后,就可以导出到Excel文件啦。

var excelIo = new GC.Spread.Excel.IO();

excelIo.save( json,

function (blob) {

saveAs(blob, fileName);

},function (e) {

console.log(e);

}

);

说完SpreadJS的一些功能,下面咱们介绍下Chrom插件吧。

Chrome插件,官方名称extensions(扩展程序);为了方便理解,以下都称为插件。

我们开发的插件需要在浏览器里面运行,打开浏览器,通过右上角的三个点(自定义及控制)-更多工具-拓展程序-打开开发者模式。点击"加载已解压的拓展程序,选择项目文件夹,就可将开发中的插件加载进来。

插件是基于Web技术构建的,例如HTML、JavaScript和CSS。它们在单独的沙盒执行环境中运行并与Chrome浏览器进行交互。插件允许我们通过使用API修改浏览器行为和访问Web内容来扩展和增强浏览器的功能。

首先在manifest.json文件中进行基础配置,如icons可以配置插件图标,我们的插件安装后,popup页面也运行了;但是我们也发现了,popup页面只能做临时性的交互操作,用完就关了,不能存储信息或者和其他标签页进行交互等等;这时就需要用到background(后台),它是一个常驻的页面,它的生命周期是插件中所有类型页面中最长的;这里设置background.js 用来作为后台管理,处理通知等、刷新、徽章等数据。至于action配置之前也提到了,可以配置弹出页面,最后的permissions可以配置权限。

基础配置之后,就可以在background.js中来进行我们的处理啦。

在插件安装成功后,可以通过chrome.alarms这个api创建刷新时间与通知时间。

chrome.runtime.onInstalled.addListener(function () {

console.log("插件已被安装");

chrome.storage.sync.get(["notiTime", "updateTime"], function (result) {

if (result && result.notiTime) {

var notiTime = parseFloat(result.notiTime);

if (notiTime \> 0) {

chrome.alarms.create("UserReplyTimer", { periodInMinutes: notiTime });

}

}

if (result && result.updateTime) {

var updateTime = parseFloat(result.updateTime);

if (updateTime \> 0) {

chrome.alarms.create("UpdateCountTimer", {

periodInMinutes: updateTime,

});

}

}

});

});

当刷新时间到,可以为其更改插件图标徽章中待处理帖子数量。使用chrome.actionAPI 控制 Google Chrome 工具栏中的扩展程序图标。

chrome.action.setBadgeBackgroundColor({ color: "\#CCCCFF" });

chrome.action.setBadgeText({

text: unreadTopicCount \> 0 ? "" + unreadTopicCount : "",

});

其结果如下图所示,还有17个帖子需要处理,提示自己加油呀!

当通知时间到,在电脑右下角可以弹窗浏览器通知,通知我们待办数量。使用chrome.notificationsAPI 使用模板创建丰富的通知,并将这些通知显示给系统托盘中的用户。当你的桌面不再停留在浏览器,或许你在处理邮件,或许你在编辑Excel。这时候系统发出的通知,会大大提高你的工作效率。

var options = {

type: "basic",

iconUrl: "img/icon.png",

title: "GCDN提醒",

message: "你关注的板块有" + unreadTopicCount + "个帖子需要处理",

};

chrome.notifications.clear("UserReplyNotification");

chrome.notifications.create("UserReplyNotification", options);

其结果如下图所示:

此外还可以选择在浏览器选项卡中打开任务列表。可以更清晰查看自己的待做事项。

chrome.tabs.create({url: window.location.href});

至此,基础谷歌插件的SpreadJS应用就介绍到这里啦,快来开发属于自己的插件吧。

本文内容源自葡萄城

相关推荐

JavaScript中常用数据类型,你知道几个?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师Lison这篇文章我们了解一下JavaScript中现有的八个数据类型,当然这并不是JavaScr...

踩坑:前端的z-index 之bug一二(zh1es前端)

IE6下浮动元素bug给IE6下的一个div设置元素样式,无论z-index设置多高都不起作用。这种情况发生的条件有三个:1.父标签position属性为relative;2.问题标签无posi...

两栏布局、左边定宽200px、右边自适应如何实现?

一、两栏布局(左定宽,右自动)1.float+margin即固定宽度元素设置float属性为left,自适应元素设置margin属性,margin-left应>=定宽元素宽度。举例:HTM...

前端代码需要这样优化才是一个标准的网站

  网站由前端和后端组成,前端呈现给用户。本文将告诉您前端页面代码的优化,当然仍然是基于seo优化的。  就前端而言,如果做伪静态处理,基本上是普通的html代码,正常情况下,这些页面内容是通过页面模...

网页设计如何自学(初学网页设计)

1在Dreamweaver中搭建不同的页面,需要掌握HTML的语句了,通过调整各项数值就可以制作出排版漂亮的页面,跟着就可以学习一些可视化设计软件。下面介绍网页设计如何自学,希望可以帮助到各位。Dre...

1、数值类型(数值类型有)

1.1数据类型概览MySQL的数据类型可划分为三大类别:数值类型:旨在存储数字(涵盖整型、浮点型、DECIMAL等)。字符串类型:主要用于存储文本(诸如CHAR、VARCHAR之类)。日期/...

网页设计的布局属性(网页设计的布局属性是什么)

布局属性是网站设计中必不可少的一个重要的环节,主要用来设置网页的元素的布局,主要有以下属性。1、float:该属性设置元素的浮动方式,可以取none,left和right等3个值,分别表示不浮动,浮在...

Grid网格布局一种更灵活、更强大的二维布局模型!

当涉及到网页布局时,display:flex;和display:grid;是两个常用的CSS属性,它们都允许创建不同类型的布局,但有着不同的用法和适用场景。使用flex布局的痛点当我们使...

React 项目实践——创建一个聊天机器人

作者:FredrikStrandOseberg转发链接:https://www.freecodecamp.org/news/how-to-build-a-chatbot-with-react/前言...

有趣的 CSS 数学函数(css公式)

前言之前一直在玩three.js,接触了很多数学函数,用它们创造过很多特效。于是我思考:能否在CSS中也用上这些数学函数,但发现CSS目前还没有,据说以后的新规范会纳入,估计也要等很久。然...

web开发之-前端css(5)(css前端设计)

显示控制一个元素的显示方式,我们可以使用display:block;display:inline-block;display:none;其中布局相关的还有两个很重要的属性:display:flex;和...

2024最新升级–前端内功修炼 5大主流布局系统进阶(分享)

获课:keyouit.xyz/14642/1.前端布局的重要性及发展历程前端布局是网页设计和开发的核心技能之一,它决定了页面元素如何组织和呈现。从早期的静态布局到现代的响应式布局,前端布局技术经历了...

教你轻松制作自动换行的CSS布局,轻松应对不同设备!

在网页设计中,自动换行的CSS布局是非常常见的需求,特别是在响应式设计中。它可以让网页内容自动适应不同屏幕尺寸,保证用户在不同设备上都能够获得良好的浏览体验。本文将介绍几种制作自动换行的CSS布局的方...

晨光微语!一道 CSS 面试题,伴你静享知识治愈时光

当第一缕阳光温柔地爬上窗台,窗外的鸟鸣声清脆悦耳,空气中弥漫着清新的气息。在这宁静美好的清晨与上午时光,泡一杯热气腾腾的咖啡,找一个舒适的角落坐下。前端的小伙伴们,先把工作的疲惫和面试的焦虑放在一边,...

2023 年的响应式设计指南(什么是响应式设计优缺点)

大家好,我是Echa。如今,当大家考虑构建流畅的布局时,没有再写固定宽度和高度数值了。相反,小编今天构建的布局需要适用于几乎任何尺寸的设备。是不是不可思议,小编仍然看到网站遵循自适应设计模式,其中它有...