我正在尝试学习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)它在val
,A1
和B1
处写入三个C1
值。但我想在i
中A1
,msginicial.getSubject()
中B1
和tam
中C1
撰写。
2)如何以交互方式更改范围?在A1:C1
中写下第一封电子邮件,在A2:C2
...
我知道这是两个非常基本的问题,但在谷歌上找不到:(
答案 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字符串方法。