2014-01-14 140 views
0

我想學習JavaScript,所以我決定把代碼谷歌的APS腳本一個腳本來列出帶有附件的所有郵件。到現在爲止,我有這樣的代碼:寫在谷歌電子表格數組

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(); 

它的工作原理,但有2個問題:

1)在A1B1C1寫三個val值。但我想寫A1imsginicial.getSubject()B1tamC1

2)如何交互式地改變範圍?寫A1:C1的第一封電子郵件,第二次在A2:C2 ...

我知道有2個非常基本的問題,但在谷歌:(

回答

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字符串的方法建立的範圍內串。

+0

問題1沒問題。我改變了'planRange = plan.getRange('A1:C1');''planRange = plan.getRange(1,1,3,3);',但現在我得到了tihs錯誤信息:'Can not find method getRange(數字,數量,數字,數量)。 (第20行,文件「代碼」)'。我試圖將數字轉換爲整數(http://stackoverflow.com/questions/596467/how-do-i-convert-a-float-to-an-int-in-javascript),但沒有任何解決方案。任何想法? – Rcoster

+0

發現錯誤!謝謝! – Rcoster