我正在使用SpreadsheetApp.getActiveRange().getValues(); 获取一系列单元格的值,但它不返回与该单元格关联的超链接,只返回文本.有没有办法获得超链接或我是否必须添加其他字段与其中的URL?
谢谢.
更新:这是我最终使用它来构建链接列表的方式.
<ul>
<?
var range = SpreadsheetApp.getActiveRange();
var data = range.getValues();
var links = range.getFormulas();
for(var i=1; i < data.length; i++){
if(data[i][0] !== ''){
?>
<li><a href="<?= links[i][0].split("\"")[1]; ?>"><?= data[i][0]; ?></a></li>
<?
}
}
?>
</ul>
Run Code Online (Sandbox Code Playgroud) 我有一种情况,脚本正在获取输入数据并将其发送到电子表格.过了一会儿,这个电子表格变得太大了.
现在我们必须手动将项目从主电子表格移动到新的电子表格.原因是并非每个人都熟悉代码并且愿意更改代码中的ID.
我想知道是否有办法按名称打开电子表格.如果没有,是否有更好的方法来实现我们需要的东西(如上所述)
我正在使用JSONP从用户收集数据,但不要求用户获得响应.
因此,我希望向用户发送即时响应,以便他们可以继续而无需等待服务器处理.
如何向他们发送回复但继续处理?
我正在使用谷歌脚本,但我想任何javascript方式返回响应并继续处理也应该工作.
我有类似的东西:
function handleResponse(e) {
//do something with e
return ContentService
.createTextOutput('console.log("updated")')
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
Run Code Online (Sandbox Code Playgroud)
我想返回响应,然后"用e做一些事情".
编辑:好的经过大量的捣乱我有一个半工作的解决方案(总是有路障!)
目前我有:
var SCRIPT_PROP = PropertiesService.getScriptProperties();
function doGet(e){
SCRIPT_PROP.setProperty("myParameters", e.parameters);
ScriptApp.newTrigger("handleResponse")
.timeBased()
.after(20 * 1000)
.create();
return ContentService
.createTextOutput('console.log("processing")')
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
function handleResponse() {
Logger.log(SCRIPT_PROP.getProperty("myParameters"));
}
Run Code Online (Sandbox Code Playgroud)
它正在做的是将数据从用户保存到类似全局的变量.然后它设置一个触发器,在20秒后执行handleResponse()函数.最后它向用户返回一些内容,因此他们不必等待handleResponse()函数完成.
现在我遇到这个解决方案时遇到的问题,它似乎是命中和错过,它有时会触发handleResponse()函数,有时候永远不会这样做.
从文档中可以看出触发器将在您指定的时间执行+/- 15分钟!现在,在它运作的时代,我已经看到它需要10秒到45秒.在没有工作的时候,我等了20分钟,但仍然没有.似乎我设置触发器的时间越短,它从未执行的次数就越多.
我遇到的另一个问题是我一次只能有14个触发器,所以如果他们决定花15分钟执行,我可以很容易地达到这个限制.
有没有其他方法可以让这样的解决方案起作用?
javascript jsonp function google-apps-script google-spreadsheet-api
我希望通过GAS将多行附加到谷歌表,同时考虑到性能和不希望的可能性.
为了实现这一目标,我将使用appendRow这个解决干预突变的问题,并在单个函数中完成所有操作.
简单示例:
var sheet= SpreadsheetApp.openById(ssId).getSheetByName(sheetName);
sheet.appendRow(["foo", "bar", "foobar"]);
Run Code Online (Sandbox Code Playgroud)
当然要将其扩展到多行,我可以简单地为每一行循环遍历此函数,尽管GAS最佳实践建议不要使用这些实践.
尝试使用appendRow通过2D阵列添加多行是不成功的,并且使用对辅助数组的引用作为进入行的值导致API.
因此,我想问,有没有办法将多行附加到电子表格中,该电子表格仍然可以处理干预的可变性,appendRow并尽可能避免循环?
需要谷歌脚本的帮助.我有多行电子表格.
需要一个执行以下操作的脚本:
如果列G中的任何单元格已更改,则使用此行中的信息向自定义地址发送电子邮件通知:来自单元格D的信息和单元格G的新值.
UPD
我找到了有用的信息:
function emailNotification() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var cell = ss.getActiveCell().getA1Notation();
var cellvalue = ss.getActiveCell().getValue().toString();
var recipient = "me@gmail.com";
var subject = 'Update to '+sheet.getName();
var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on cell: «' + cell + '» New cell value: «' + cellvalue + '»';
MailApp.sendEmail(recipient, subject, body);
};
Run Code Online (Sandbox Code Playgroud)
此脚本跟踪整个表中的更改.我想仅跟踪G列中的更改,并从列D获取值.
题:
当值更改了G列中的单元格时,如何获取D列中单元格的值
最后的脚本 - 回答我的问题 …
我发现了多个StackOverflow问题,涉及如何使用Google Spreadsheets API或旧版API 创建或编辑Google Doc电子表格.但是,这个Spreadsheets API似乎是"gdata"库的一部分,据我所知,这个库已被弃用.
较新的StackOverflow答案显示了如何使用Drive API创建一个空电子表格,这似乎更新.但是,通过查看该API的文档和示例,它似乎只允许您使用电子表格MIME类型创建新的EMPTY文件.我没有找到任何用于创建包含实际内容(即行,列,工作表等)的电子表格的功能.
创建新的Google Doc电子表格并用内容填充它的当前流程是什么?Drive API是否具有我不理解的功能?"gdata"库(或者至少它的Spreadsheets API部分)毕竟没有被完全弃用吗?是否有一些我完全错过的第三种方法?我正在使用Java代码,尽管我确信任何Python API都具有Java等价物.
google-docs google-sheets google-docs-api google-spreadsheet-api google-drive-api
我创建了一个包含五列的Google电子表格;
一旦用户填写前三列中的值,它就必须调用第三方API并填充第四和第五列中的值(响应).
是否可以在Google Spreadsheet中为API调用编写代码?是否可以在Google电子表格中调用并获取外部API的响应?
使用Google表格API v4,我希望获得附加到我的帐户的电子表格列表.我做了很多研究,但没有找到任何解决方案.
function myFunction() {
var url = 'https://api.github.com/users/chaimf90/repos'
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json)
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(['Repo Name', data[0].name]);
}
Run Code Online (Sandbox Code Playgroud)
当我从脚本编辑器执行此函数时,它会按预期运行,但是当我尝试通过调用在工作表本身中调用此函数时=myFunction(),我收到一条错误消息,指出我无权调用appendRow.
为什么我可以从脚本编辑器而不是从工作表本身调用这个函数?
我正在使用Google表格V4 附加API将数据插入到新创建的工作表中.我插入1000行和1001列的数据,即1001000个单元格.
String url = https://sheets.googleapis.com/v4/spreadsheets/<spreadSheetId>/values/<workSheetName>!A1:append?access_token=<accessToken>&valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS
//CREATING THE REQUEST BODY
reqBody.put("range", <workSheetName>+"!A1");
reqBody.put("majorDimension", "ROWS");
reqBody.put("values", <values>);
Run Code Online (Sandbox Code Playgroud)
我收到400 Bad Request消息:"此操作会使工作表中的单元格数量增加到超过2000000个单元格的限制."
我知道谷歌每张纸有200万个单元格限制,但我无法找出为什么我得到这个例外,特别是因为我没有超出限制.
有关为什么会出现此错误的任何帮助?