Google Spreadsheet Add-on Links Extractor 谷歌表格插件链接提取器的制作与发布(附源码)

引言

为什么想到制作这么一个插件呢,是因为博主在更新微信公众号【刷尽天下】的后台数据库时,需要有博客园题目帖子的链接,那么就要从这篇帖子 LeetCode All in One 题目讲解汇总(持续更新中...) 中提取各个题目的链接。之前博主都是使用的都是Excel的插件 Kutools 来完成的,但是这个插件不是免费的,而且只能在 Windows 下使用,对于博主这样的 Mac 控来说,十分的不方便。想着 Mac 下应该也有类似的插件吧,结果搜了半天,没搜到合适的。突然灵机一动,对啊,为何不去试试 Google Sheets,这上面应该可以提取链接吧,结果令博主更加失望,Google Sheets 感觉提供的功能比 Excel 还要少,但是好在有一个插件商店,那么就上去搜索吧,看到了一个名为 Extract Drive Links 的插件,但貌似它是提取文件的链接,而不是数据的链接,而且更加坑爹的是,这个插件使用不了,显示:

This app has not been verified yet by Google in order to use Google Sign In.

该插件作者好像没有让谷歌验证,从而使用不了。无奈了,只能上网搜索一下,看大家有没有什么好的解决方案没。果然有人跟我遇到过同样的问题,参见这个帖子 Extract the link text and URL from a hyperlinked cell。而且还提供了脚本,博主试了一下,可以使用,但是用户体验不太好,对于非码农用户不友善,那么为啥不能自己写一个 User-friendly 的插件供大家使用呢,说干就干,下面就开始了插件的开发之旅了。

插件开发

第一步当然是找资料了啊,搜了搜 Google Sheets Add-ons 开发的官方文档, 里面有开放给开发者能调用的 API,一定是需要的。还找到了关于插件发布的一些文档,到发布的时候再研究吧,现在东西都没有,看这些也没啥意义。然后就是去 Github 上找找相关的项目看看了,大概找了几个,但是发现和我想做的并不太相关,并没有太大的参考价值,还不如直接去研究开发文档呢。

在查阅了一些资料后,大概明白了 Google Docs 的插件的脚本语言使用的是 Google Script,是一种基于 Javascript 的语言,只要写过 Javascript,都没啥太大的问题,就是 js 的语法调用 Google Docs 特定的 API 就行了。

在具体开始实现之前,明确自己的需求,我希望能让用户来输入特定的区间,然后把该区间内的所有链接都提取出来,显示到特定的位置。那么整个就是分为三步:

  1. 弹出输入框,让用户输入,并获得输入结果。
  2. 进行链接的提取。
  3. 找到特定的位置并显示。

其中第一和第三步是服务于用户体验的,第二步是本插件的核心,所以优先来实现吧。提取链接的原理是什么呢,就是从 Formula 中的超链接里提取。不管是 Google Sheets 还是 Excel,点击任意一个位置,上面都有一个 fx 显示框,那里就是显示 Formula 的地方,而链接就是显示在那里的,例如:

=HYPERLINK("https://www.google.com/","Google")

这个就表示文字为 Google 并且含有的超链接为 https://www.google.com/。提取的方法就是通过字符串的正则匹配来完成的,关于算法的部分这里就不细说了,博主之后会将源码放到 Github 上,有兴趣的童鞋可以自行研究。

博主还遇到了一个问题,就是直接从网页上拷贝过来的富文本 Rich Text,并不会直接在 Formula 中显示超链接,虽然其确实包含了超链接。而 Formula 中却只显示了 Text,上网搜了一下,好像是个普遍存在的问题,参见 Paste value only without formula for hyperlinks。这就很头疼了,因为要提取的链接是从 Formula 中来的。博主想了一个手动的解决方案,对于每个单元格,进行如下操作:

  1. 右击单元格,选择菜单中的编辑链接 Edit Link。
  2. 点击应用 Apply。

这样超链接就会出现在 Formula 中了,当然这只是个临时的解决方案,因为当数据量很大的时候,也会十分的不方便。这里请求各位看官大神们一起来想解决方案啊。

最重要的一步完成了之后,剩下的两步就比较简单了,弹出输入数据框的实现参见的是官方文档 Dialogs and Sidebars in G Suite Documents,而找特定的位置显示看的是 StackOverFlow 上的一个贴子 Script to have?Google?Sheets jump to the next available row in column A automatically?

发布

好,到此为止,插件就开发完成了,博主也自己测试过了,没啥大问题,下面就是准备发布了,谁知开发只用了不到一天的时候,研究如何发布却用了整整三天,实在是不合理啊,Google 把发布过程整的实在是太复杂了,而且各种文档,各种链接,跳来跳去的,看的是眼花缭乱的,这里就来稍微吐个槽吧。

首先,当然是要去看关于插件发布的官方文档了 Publishing add-ons,大概发现有两个发布的地方,一个是 Chrome Web Store,一个是 G Suite Marketplace,博主一想,咱这做的属于 G Suite 插件,不是 Chrome 插件,按道理说一改是发布到 G Suite Marketplace 上,但后来才发现实际上这里是个坑,需要在两个平台上同时发布。

然后博主就在研究如何发布到 G Suite Marketplace 上,遇到的第一个麻烦事就是需要一个 Google Verified 的网站,谁还会为了个这个小的插件去搞个服务器搭个网站啊,但是人家非要在 Google Search Console 上进行网站验证,验证方法五花八门,什么在服务器上传 Html 文件啊,或使用 Html tag 啊,或者使用 Google Analytics 啊之类的,受不鸟了。后来,博主总算发现了一个捷径,就是使用 Google Sites 创建的网页可以自动被验证,后来又发现只用使用老版的 Google Sites 创建的网页才能成功被验证,新版的貌似有点问题,然后在网页上介绍这个插件,截图什么的,这个总共花了博主不少时间。

之后要做的就是申请 OAuth 验证,这个可能是 Google 后来增加的步骤,像引言中提到的那个插件貌似就是没有进行这个验证,从而无法使用,这个主要就是要制作一个插件的 Logo,各种尺寸的大小,于是就用 Photoshop 做了一个,然后还要整个什么隐私条款 Privicay Policy,博主就在网上找了个模版改了改。这个 OAuth 验证申请的审核时间还不短,耐心的等待吧。

接下来就是激活和配置 G Suite Marketplace SDK 了,这个也挺烦的,还得做个 banner 图片,就是在插件商店显示的图片,于是又用 Photoshop 整了一个,还要三种不同尺寸且不等比例的 banner,我也是呵呵呵了,还要写什么服务条款 Terms of Service,整整整,全都整,要啥整啥。

配置完成了之后又遇到了一个坑,因为配置下面有一个发布界面,填好了所有的信息之后,怎么都发布不了,因为 Publish 按钮一直都是灰色的不可点击状态,后来上网搜原因,终于在 Google Issue Tracker 上找了相关的帖子 Add-on publish form not working,还好博主之前在狗家实习过,对 bugnaizer 还是比较熟悉的,一位好心的 Googler 告诉博主应该先上传到 Chrome Web Store 上,在 CWS 上发布之后,G Suite Marketplace 上就可以自动发布了。

好,接下来就去 Chrome Developer Dashboard 上发布吧,上传了项目后等待审核,第二天就有 Googler 联系了,说我的这个插件的 idea 挺有趣,但是 OAuth 审核还没下来,还不能发布,又指出了 UI 中的一个拼写错误,嗯嗯,审核的很仔细啊,给这位 Googler 的敬业精神点个赞。然后就是去跟 OAuth 的审核人员进行漫长的沟通,后来还需要做一个视频来展示如何使用的各个 scope,反正超级麻烦。博主一度都不想发布了,但是后来的某一天,突然就通过了。精神为之一振,于是马上就告诉了插件的审核人员,第二天就成功的发布到了 Chrome Web Store 上了。

改进

最后再说一下需要设法改进的地方,那就是只有当链接在 Formula 中存在的时候,本插件才能提取出来。而直接从其他网页上拷贝过来的富文本虽然包含链接,但是 Formula 中可能没有显示,博主提出的临时解决方案是右击单元格,选择编辑链接 Edit Link,然后点确定,这样链接就会出现在 Formula 中。但是加入有很多行,这样的操作就不是很高效,需要想一种解决方案。但是 Google 并没有提供操作 Edit Link 的 API,所以我们貌似没法通过代码来使得链接出现在 Formula 中。博主一时也没想出好的解决方法,希望各位看官大神有好的方法一定要告诉博主啊~

后记

终于成功的发布了这个小插件,开发只用了一天,发布持续了一个多月,也是醉了,不过最终能在 Chrome Web Store 中看到自己的插件,还是蛮有成就感的。有了这个发布经验,以后再做点啥应该就会更顺心一些吧~

源码

项目代码已经上传到了Github上,喜欢的话请给博主一颗小星星哈 ^.^:

https://github.com/grandyang/links-extractor-google-sheets-add-ons

Chrome 应用商店地址:

https://chrome.google.com/webstore/detail/links-extractor/mhafjmjohbgmdabjlbdjnppgljbfkljn

参考资料

https://www.cnblogs.com/grandyang/p/4606334.html

https://www.extendoffice.com/product/kutools-for-excel.html

https://chrome.google.com/webstore/detail/extract-drive-links/klonacpfbangpegffkdopiilfdhgjhgo?utm_source=permalink

https://webapps.stackexchange.com/questions/89557/extract-the-link-text-and-url-from-a-hyperlinked-cell#comment85786_89557

https://developers.google.com/apps-script/reference/spreadsheet/

https://webapps.stackexchange.com/questions/95134/paste-value-only-without-formula-for-hyperlinks

https://developers.google.com/apps-script/guides/dialogs

http://script%20to%20have%20google%20sheets%20jump%20to%20the%20next%20available%20row%20in%20column%20a%20automatically/?

https://developers.google.com/gsuite/add-ons/how-tos/publish-overview

https://developers.google.com/gsuite/marketplace/sdk

https://issuetracker.google.com/issues/127774772

原文地址:https://www.cnblogs.com/grandyang/p/10836860.html

时间: 2024-10-04 02:21:27

Google Spreadsheet Add-on Links Extractor 谷歌表格插件链接提取器的制作与发布(附源码)的相关文章

devexpress表格控件gridcontrol设置隔行变色、焦点行颜色、设置(改变)显示值、固定列不移动(附源码)

介绍一些常用的gridcontrol设置. 1.设置隔行变色.首先设置显示隔行变色,步骤:OptionsView-->EnableAppearanceEvenRow-->true和OptionsView-->EnableAppearanceOddRow-->true;然后设置奇数行和偶数行样式颜色等:Appearance-->EvenRow和Appearance-->OddRow.设计完成后,设计器出现隔行变色效果,如图: 2.设置奇偶行样式时,会看到其他行样式.App

Google spreadsheet php client API

最近 由于谷歌 关闭了 ClientLogin 的验证方式..导致以前一直使用的 zend gdata api无法正常工作. 该死的 zend 5月20日更新了 api 却没有转换谷歌推荐的 OAuth 2.0验证依然使用的ClientLogin 方式. 于是至少上网查google spreadsheet的API.该死的google居然只出了java和.net的 基于OAuth 验证的 API library. 这下掉的大.难道要自己去研究spreadsheet 的API文档 然后自己写php

google谷歌翻译插件-网页一键翻译

上个月转载的一篇博文,是推荐的四款非常实用的翻译插件,这几天看这个chrome插件网首页有新增了一个google谷歌翻译插件.我能说实话,这款插件比之前推荐的4款翻译插件更好用吗?也不能完全说是更好用啦,只是说我更信任google.相信google的产品就像相信百度翻译一样.我就是这么虚荣吗?就被简单的“Google官方发布”就轻易收买,品牌效应真是不可限量,还有什么比google谷歌翻译插件更适合谷歌浏览器的吗?这就是天生一对吧

谷歌google搜索打不开、谷歌gmail邮箱及相关服务无法登录的解决的方法

歌打不开 google打不开,与中国大陆封杀有关,可是主要是由于近期googleserver在全球范围内又一次进行了布局调整. 解决的方法是仅仅要改动用户本地计算机hosts文件就能够了. 一.Windows系统改动hosts文件的方法 windows系统hosts文件在本地电脑C盘,路径是:C:\Windows\System32\drivers\etc 用记事本txt文件打开hosts文件. (假设提示没有管理权限的话,可把hosts文件复制,粘贴到电脑的桌面.在电脑桌面上双击hosts文件,

[Android编译(二)] 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

1 前言 经过一周的奋战,终于从谷歌官网上下载最新的android 6.0.1_r62源码,编译成功,并成功的刷入nexus6p,接着root完毕,现写下这篇博客记录一下实践过程. 2 简介 自己下载android系统源码,修改定制,然后编译刷入安卓手机,想想还有点小激动呢.简单点说一句话--定制我们自己的MIUI,这就是android的魅力,这篇博客博主就来教大家实现自己的定制系统. 首先,要明白下面的基础知识: (1) 什么是aosp? aosp就是android open source p

【源码】谷歌代理~WPF简单小软件-2015-10-15首发 (2016-03-01已更新源)

蛋疼,昨天把代理去了后才发现,原来咱们连谷歌应用都访问不了,,,用别人的总觉得不怎么安全,然后今天早上就编了个小软件干掉他这限制==>  GoogleProxy.exe [主要目的:为了能在线安装谷歌应用,其他辅助] 软件:http://pan.baidu.com/s/1gdxylNX (源码见下面) 链接:http://pan.baidu.com/s/1jG2bPpO 密码:huvu 如果只是想谷歌搜索: http://google.bigblog.cn/ 更新记录 2016-03-01 07

google code 上源码的下载方法

SVN全称是Subversion,是Apache的一个子项目 ,具体能够到SVN中文站(http://www.subversion.org.cn/)去了解下.Google Code是Google的一个开放源码计划,当中包含源码托管,即提供一个server来保存.共享和管理源码.每一个人都能够创建自己的Project,至于空间的大小,请看下图: 我想一般项目都足够用了. 准备工具 TortoiseSVN-1.6.9.19725-win32-svn-1.6.12(Explorer 插件) SubEc

Google之Chromium浏览器源码学习——base公共通用库(一)

Google的优秀C++开源项目繁多,其中的Chromium浏览器项目可以说是很具有代表性的,此外还包括其第三开发开源库或是自己的优秀开源库,可以根据需要抽取自己感兴趣的部分.在研究.学习该项目前的时先获取到需要获取一份谷歌的Chromium源码,可参考:http://blog.csdn.net/kuerjinjin/article/details/23563059,若无法获取且打算使用VS IDE的可从此处下载:http://blog.csdn.net/kuerjinjin/article/d

google 开放I/O源码

在这款应用程序中谷歌对部分功能.API和设计架构进行了非常详细的阐述,其中包括碎片.程序加载.服务.广播.接收器.警告.通知.SQLite数据库.内容提供商.Action Bar.导航Drawer和Google Drive API.Google Cloud Messaging.Material Design, Android L Preview APIs和Android Wear兼容整合等等. 源代码位于: https://github.com/google/iosched google 开放I