标签: google-spreadsheet-api

如何从Google Apps脚本中的数据单元格中检索超链接?

我正在使用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)

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

9
推荐指数
1
解决办法
8195
查看次数

按名称打开Goog​​le文档电子表格

我有一种情况,脚本正在获取输入数据并将其发送到电子表格.过了一会儿,这个电子表格变得太大了.

现在我们必须手动将项目从主电子表格移动到新的电子表格.原因是并非每个人都熟悉代码并且愿意更改代码中的ID.

我想知道是否有办法按名称打开电子表格.如果没有,是否有更好的方法来实现我们需要的东西(如上所述)

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

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

如何返回对JSONP请求的即时响应并继续处理

我正在使用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

9
推荐指数
1
解决办法
670
查看次数

向电子表格添加多行 - Google Apps脚本

我希望通过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并尽可能避免循环?

google-apps-script google-spreadsheet-api

9
推荐指数
3
解决办法
9539
查看次数

单元格更改时的电子邮件通知

需要谷歌脚本的帮助.我有多行电子表格.

需要一个执行以下操作的脚本:

如果列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列中单元格的值

最后的脚本 - 回答我的问题 …

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

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

如何以编程方式创建包含内容的Google文档电子表格?

我发现了多个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

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

可以使用Google Spreedsheet中的外部API调用吗?

我创建了一个包含五列的Google电子表格;

一旦用户填写前三列中的值,它就必须调用第三方API并填充第四和第五列中的值(响应).

是否可以在Google Spreadsheet中为API调用编写代码?是否可以在Google电子表格中调用并获取外部API的响应?

spreadsheet google-sheets google-spreadsheet-api

8
推荐指数
2
解决办法
9131
查看次数

使用Sheets API v4获取与Google帐户关联的所有电子表格列表

使用Google表格API v4,我希望获得附加到我的帐户的电子表格列表.我做了很多研究,但没有找到任何解决方案.

java google-sheets google-spreadsheet-api google-sheets-api

8
推荐指数
2
解决办法
4019
查看次数

Google 表格“您无权调用 appendRow”

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.

为什么我可以从脚本编辑器而不是从工作表本身调用这个函数?

javascript google-apps-script google-spreadsheet-api

8
推荐指数
1
解决办法
5620
查看次数

调用Sheet API时,获取"此操作会增加工作表中单元格的数量超过2000000单元格的限制"

我正在使用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万个单元格限制,但我无法找出为什么我得到这个例外,特别是因为我没有超出限制.

有关为什么会出现此错误的任何帮助?

google-spreadsheet-api google-sheets-api

8
推荐指数
1
解决办法
1281
查看次数