标签: google-apps-script

如何在不使用XmlService的情况下解析Google Apps脚本中的HTML字符串?

我想使用Google Spreadsheets和Google Apps脚本创建一个刮刀.我知道这是可能的,我已经看过一些关于它的教程和线程.

主要想法是使用:

  var html = UrlFetchApp.fetch('http://en.wikipedia.org/wiki/Document_Object_Model').getContentText();
  var doc = XmlService.parse(html);
Run Code Online (Sandbox Code Playgroud)

然后开始使用这些元素.但是,方法

XmlService.parse()
Run Code Online (Sandbox Code Playgroud)

对某些页面不起作用.例如,如果我尝试:

function test(){
    var html = UrlFetchApp.fetch("https://www.nespresso.com/br/pt/product/maquina-de-cafe-espresso-pixie-clips-preto-lima-neon-c60-220v").getContentText();
    var parse = XmlService.parse(html);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error on line 225: The entity name must immediately follow the '&' in the entity reference. (line 3, file "")
Run Code Online (Sandbox Code Playgroud)

我试图用来string.replace()消除显然导致错误的字符,但它不起作用.出现所有其他错误.以下代码为例:

function test(){
    var html = UrlFetchApp.fetch("https://www.nespresso.com/br/pt/product/maquina-de-cafe-espresso-pixie-clips-preto-lima-neon-c60-220v").getContentText();
    var regExp = new RegExp("&", "gi");
    html = html.replace(regExp,"");

    var parse = XmlService.parse(html);
}
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

Error on line 358: The content of elements must …
Run Code Online (Sandbox Code Playgroud)

javascript parsing html-parsing google-sheets google-apps-script

15
推荐指数
3
解决办法
2万
查看次数

Google Apps Script V8 vs Rhino 的“日志”非常慢?

使用 Rhino,日志对话框(“command + Enter”或“视图”菜单中的日志)会立即显示日志。但是,对于使用 V8 引擎的测试项目,即使加载最简单的日志也需要 10-20 秒,并显示消息“正在等待日志,请稍候...”

“Logger.log”或“console.log”加载日志都很慢。有没有其他人遇到同样类型的缓慢?这是新引擎的预期吗?

先感谢您!

这是我用于测试的基本功能:

function logTest() {
 Logger.log("log test");
}
Run Code Online (Sandbox Code Playgroud)

logging v8 google-apps-script google-cloud-stackdriver

15
推荐指数
1
解决办法
3147
查看次数

用于汇总数据未更新的脚本

我有一张时间表数据的Google电子表格; 它每个月都有一张表,每张表有很多六个列块,每个客户一个块.

我创建了一个摘要表,其中包含每个客户的总数并将其显示在列表中:

function getClientTotals(sheetname, colcount)
{  
  colcount = colcount ? colcount : 6;
  var res;      
  var ss = SpreadsheetApp.openById('myid_goes_here');
  if(ss)
  {
    res = [];
    var totrow = ss.getRange(sheetname + '!A1:ZZ1').getValues()[0];
    for(var i = 0; i < totrow.length; i += colcount)
    {
      res.push([totrow[i], totrow[i + colcount - 1]]);
    }
  }   
  return res;
}
Run Code Online (Sandbox Code Playgroud)

然后我在我的摘要表中添加了一个单元格,=getClientTotals($C$7,$C$8)其中包含月份工作表名称和每个客户端的列数(如果是"模式"修改).

这一切都正常,但是,当源数据发生更改时,它不会更新.我添加了一个onEdit触发器; 没有快乐.如果您转到脚本编辑器并点击"保存",它会更新,但这没有用.我错过了什么吗?

google-apps google-sheets google-apps-script custom-function

14
推荐指数
1
解决办法
2万
查看次数

通过电子邮件触发Google Apps脚本

我正在寻找一个模式示例,其中在GoogleAppsForBusiness域中运行的恶魔脚本可以解析传入的电子邮件.某些消息将包含对不同GAScript的调用,例如,可能会更改特定文档的ACL设置.

我假设其他人已经实现了这种模式但不确定我如何寻找示例.

谢谢

google-apps-script

14
推荐指数
2
解决办法
2万
查看次数

使用apps脚本在Google云端硬盘中创建一个zip文件

我在谷歌驱动器文件夹中有一个包含少量文件的文件夹.我想制作一个谷歌应用程序脚本,压缩该文件夹中的所有文件,并在同一文件夹中创建zip文件.我发现了一个有Utilities.zip()函数的视频.但是没有API参考.如何使用它?提前致谢.

google-apps-script google-drive-api

14
推荐指数
2
解决办法
3万
查看次数

使用自定义用户代理字符串的UrlFetch?

是否可以更改用于Google Apps脚本UrlFetchApp.fetch请求的用户代理字符串?

2010年的讨论暗示了Google Apps脚本中的UrlFetch模块支持将User-Agent标头添加到可选headers集合中,例如Google App Engine的UrlFetch模块.但是,GAS文档没有说明这一点.我制作的测试脚本也显示它不起作用.

测试脚本:

function testUserAgentString(){
  var page;
  try {
    page = UrlFetchApp.fetch('http://www.myuseragent.net/', {headers: {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"}}).getContentText();
    Logger.log(page);
  } catch(_) {}
}
Run Code Online (Sandbox Code Playgroud)

日志输出(减去不相关的HTML)是:

Mozilla/5.0 (compatible; GoogleDocs; script; +http://docs.google.com)

这是GAS执行UrlFetch请求时使用的默认用户代理字符串.

我错过了什么或做错了什么?

编辑:由于目前无法做到这一点,我根据Arun的建议在问题追踪器上提出了增强请求.

user-agent google-apps-script

14
推荐指数
1
解决办法
4196
查看次数

Google Apps脚本,将一个电子表格复制到另一个带格式的电子表格

希望这个问题尚未得到解答.我花了相当多的时间搜索,虽然我找到了类似的帖子,但没有一个完全符合我的要求.

我想使用Google Apps脚本将单个工作表从Google电子表格复制到另一个Google电子表格中,我希望保留格式(包括合并的单元格).有没有办法做到这一点?我尝试了以下功能:

copyTo()copyFormatToRange()

但这些方法仅在同一电子表格中工作,不允许在不同的电子表格之间复制数据.有没有人有什么建议?谢谢!

google-sheets google-apps-script

14
推荐指数
1
解决办法
4万
查看次数

在Google Apps脚本网络应用中使用Facebook API?

我正在尝试使用Google Apps脚本作为网络应用创建Facebook应用,作为后端.唯一似乎适用的Facebook API是Javascript SDK,但我甚至无法使用它.
我目前遇到的问题是Facebook JS SDK使用以"__"结尾的Javascript标识符.Google Apps脚本限制以双下划线结尾的名称.

如果我使用Facebook的JS文件的修改副本而没有名称中的双重下划线,我会收到此错误:
Refused to display [URL] in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'

知道怎么让GAS和FB一起玩得好吗?

google-apps-script facebook-graph-api facebook-apps

14
推荐指数
1
解决办法
1万
查看次数

Google Spreadsheets:仅复制过滤/过滤视图行

我有两张表,联系人和邮件程序

需要将Google电子表格上的过滤/过滤视图后面的联系人:B列中的可见单元格复制到Mailer的A列.

由于行的可见性还没有开放功能,我该怎么做?我不想编写许多FILTER()代码,因为过滤器可以不断更改,它们将由用户定义...结果将始终在B列中.

请让我知道解决方案/解决方法.

最坏情况场景:在打开行可见性功能之前,我们必须手动将单元格从一个工作表复制到另一个工作表,但我希望避免这样做:)

谢谢

google-sheets google-apps-script google-spreadsheet-api

14
推荐指数
2
解决办法
3万
查看次数

谷歌应用程序脚本中的每个循环

我正在使用Google Apps脚本编写简单的电子邮件机器人处理程序.
说有一系列的东西.
我想使用for-each循环遍历数组.
(这很乏味,for(var i=0;i<threads.length;i++)每次我遍历一个数组都会写.)
我正在寻找谷歌应用程序脚本的for-each循环.
我已经看到了这个答案,但是对象是未定义的,大概是因为for循环不起作用.

// threads is a GmailThread[]
for (var thread in threads) {
  var msgs = thread.getMessages();
  //msgs is a GmailMessage[]
  for (var msg in msgs) {
    msg.somemethod(); //somemethod is undefined, because msg is undefined.
  }
}
Run Code Online (Sandbox Code Playgroud)


(我还是javascript的新手,但我知道来自java的for-each循环.)

javascript google-apps-script

14
推荐指数
2
解决办法
3万
查看次数