在Google Spreadsheets中编写数组

时间:2014-01-14 13:10:40

标签: javascript google-apps-script

我正在尝试学习javascript,因此我决定在Google Apss脚本中编写脚本以列出所有带附件的电子邮件。到现在为止,我有这段代码:

function listaAnexos() {
  // var doc = DocumentApp.create('Relatório do Gmail V2');
  var plan = SpreadsheetApp.create('Relatorio Gmail');
  var conversas = GmailApp.search('has:attachment', 0, 10)
  var tamfinal = 0;
  if (conversas.length > 0) {
    var tam = 0
    var emails = GmailApp.getMessagesForThreads(conversas);
    var cont = 0;
    for (var i = 0 ; i < emails.length; i++) {
      for (var j = 0; j < emails[i].length; j++) {
        var anexos = emails[i][j].getAttachments();
        for (var k = 0; k < anexos.length; k++) {
          var tam = tam + anexos[k].getSize();
        }
      }
      var msginicial = conversas[i].getMessages()[0];
      if (tam > 0) {
        val = [i,  msginicial.getSubject(), tam];
        planRange = plan.getRange('A1:C1');
        planRange.setValue(val);
        // doc.getBody().appendParagraph('A conversa "' + msginicial.getSubject() + '" possui ' + tam + 'bytes em anexos.');
      }
      var tamfinal = tamfinal + tam;
      var tam = 0;
    }
  }
}
listaAnexos();

它有效,但有两个问题:

1)它在valA1B1处写入三个C1值。但我想在iA1msginicial.getSubject()B1tamC1撰写。

2)如何以交互方式更改范围?在A1:C1中写下第一封电子邮件,在A2:C2 ...

中写下第二封电子邮件

我知道这是两个非常基本的问题,但在谷歌上找不到:(

1 个答案:

答案 0 :(得分:1)

问题1:确保使用正确的方法。您已使用Range.setValue()接受value作为输入,并使用该值修改范围的内容。您应该使用Range.setValues(),它需要一个数组并修改与数组相同尺寸的范围。 (即使您只触摸一行,该数组也必须是一个二维数组。)

    val = [[i,  msginicial.getSubject(), tam]];
    planRange = plan.getRange('A1:C1');
    planRange.setValues(val);

问题2 :(我假设您的意思是'以编程方式'或'自动',而不是'交互式'。)您可以在循环中使用行号和列号,例如getRange(row, column, numRows, numColumns),或者构建范围字符串使用javascript字符串方法。