我想使用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
使用 Rhino,日志对话框(“command + Enter”或“视图”菜单中的日志)会立即显示日志。但是,对于使用 V8 引擎的测试项目,即使加载最简单的日志也需要 10-20 秒,并显示消息“正在等待日志,请稍候...”
“Logger.log”或“console.log”加载日志都很慢。有没有其他人遇到同样类型的缓慢?这是新引擎的预期吗?
先感谢您!
这是我用于测试的基本功能:
function logTest() {
Logger.log("log test");
}
Run Code Online (Sandbox Code Playgroud) 我有一张时间表数据的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
我正在寻找一个模式示例,其中在GoogleAppsForBusiness域中运行的恶魔脚本可以解析传入的电子邮件.某些消息将包含对不同GAScript的调用,例如,可能会更改特定文档的ACL设置.
我假设其他人已经实现了这种模式但不确定我如何寻找示例.
谢谢
我在谷歌驱动器文件夹中有一个包含少量文件的文件夹.我想制作一个谷歌应用程序脚本,压缩该文件夹中的所有文件,并在同一文件夹中创建zip文件.我发现了一个有Utilities.zip()函数的视频.但是没有API参考.如何使用它?提前致谢.
是否可以更改用于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的建议在问题追踪器上提出了增强请求.
希望这个问题尚未得到解答.我花了相当多的时间搜索,虽然我找到了类似的帖子,但没有一个完全符合我的要求.
我想使用Google Apps脚本将单个工作表从Google电子表格复制到另一个Google电子表格中,我希望保留格式(包括合并的单元格).有没有办法做到这一点?我尝试了以下功能:
copyTo()copyFormatToRange()
但这些方法仅在同一电子表格中工作,不允许在不同的电子表格之间复制数据.有没有人有什么建议?谢谢!
我正在尝试使用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电子表格上的过滤/过滤视图后面的联系人:B列中的可见单元格复制到Mailer的A列.
由于行的可见性还没有开放功能,我该怎么做?我不想编写许多FILTER()代码,因为过滤器可以不断更改,它们将由用户定义...结果将始终在B列中.
请让我知道解决方案/解决方法.
最坏情况场景:在打开行可见性功能之前,我们必须手动将单元格从一个工作表复制到另一个工作表,但我希望避免这样做:)
谢谢
我正在使用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循环.)