2017-03-02 30 views
1

我运行此代码,它什么都不做。没有错误,没有输出。任何帮助,将不胜感激!使用getthreads代码不工作在GAS

我试着改变一切......范围,工作表名称,appendRow与setValues。我已经为线程的开始和最大值添加了0,10,删除了第一个for循环...迄今为止没有任何工作。

function myFunction() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("NewEmails"); 
    var range = sheet.getRange(1,1,25,25); 


    //.appendRow("this function works a little"); 

    var threads = GmailApp.getInboxThreads(0,10); // get first thread in inbox 
    //var message = thread.getMessages()[0]; // get first message 

    //var threads = label.getThreads(); 

for (var i=0; i<10; i++) //threads.length 
    { 
    var messages = threads.getMessages(); 

    for (var j=0; j<10; j++) //messages.length 
    { 

     var dat = messages[j].getDate(); 
     var sndr = messages[j].getFrom(); 
     var rcpnt = messages[j].getTo(); 
     var sub = messages[j].getSubject(); 
     var msg = messages[j].getBody(); 

     var target = [dat,sndr,rcpnt,msg, sub, dat]; 

     sheet.getRange(1,1,25,25).setValues(target); 

     //.appendRow([dat,sndr,rcpnt,msg, sub, dat]); DOES NOT WORK FOR SOME REASON BUT IS PREFERED METHOD 
    } 
     //threads[i].removeLabel(label); 
    } 
} 
+0

目标必须是二维数组。 'setValues()'需要一个二维数组。每个内部数组表示一行。每个内部数组的每个元素表示一个单独的单元格。 'var outerArray = []; outerArray.push(目标); sheet.getRange(1,1,outerArray.length,target.length).setValues(outerArray);'如果您对故障排除工具不熟悉,请阅读[故障排除指南](https://developers.google.com/apps -script/troubleshooting) –

+0

是的,我意识到setValues()和setValue()是一个很大的区别。这两个可以与一个范围一起使用。 appendRow()必须在表单级别使用。 OMG! – Clayten

回答

1

我从来没有玩过这个,但我终于得到了这个工作。

function onOpen() 
{ 
    SpreadsheetApp.getUi().createMenu('My Tools') 
    .addItem('Get My Messages', 'MyMessages') 
    .addToUi(); 
} 

function MyMessages() 
{ 
    var threads = GmailApp.getInboxThreads(); 
    var s = ''; 
    for(var i = 0; i < threads.length; i++) 
    { 
    var msg = threads[i].getMessages(); 
    for(var j = 0; j < msg.length;j++) 
    { 
     s += 'Message' + j+1 + '<br />'; 
     s += msg[j].getFrom() + '<br />'; 
     s += msg[j].getBody() + '<br />'; 

    } 

    } 
    dispStatus('My Messages', s , 800 , 400); 
} 

function dispStatus(title,html,width,height) 
{ 
    var title = typeof(title) !== 'undefined' ? title : 'No Title Provided'; 
    var width = typeof(width) !== 'undefined' ? width : 800; 
    var height = typeof(height) !== 'undefined' ? height : 400; 
    var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>'; 
    var htmlOutput = HtmlService 
    .createHtmlOutput(html) 
    .setWidth(width) 
    .setHeight(height); 
SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title); 
} 

我没有试图将它放在电子表格中,但我想这是作为读者的练习。但请记住,当您将setValues用于一个范围时,源的大小必须与目标的大小相等,并且在我看来它们并不是这样。

var target = [dat,sndr,rcpnt,msg, sub, dat]; 
sheet.getRange(1,1,25,25).setValues(target); 

目标是1行5列,你的目的地是25 x 25所以我猜这不会飞。在html对话框中显示它们的另一个好处是它们已经是html格式。

+0

你是最棒的。我一直在用类似的脚本工作,只是把它发布到电子表格中,但没有发现。让我测试这个脚本,但我相信你甚至解决了一些其他问题! – Clayten

+0

侧面问题:由于您似乎对创建用户界面有更多了解......如果我将脚本转换为像这样的用户界面,是否知道是否它们运行得更快,而不是使用Google表单? – Clayten

+0

我真的不知道。但我的猜测是,如果你最大限度地利用客户端(html对话框和边栏)和服务器端的最大优势,那么我猜服务器总是会赢。话虽如此,我发现在单个电子表格中设置值非常耗时,而不是使用setValues并给它一个数组。这是我第一次搞砸GmailApp,所以我想对我来说最好的答案就是不知道。 – Cooper

0

帮助这段代码的一件事是我意识到setValues()和setValue()是一个很大的区别。这两个可以与一个范围一起使用。 appendRow()必须在表单级别使用。

你可以说:sheet.appendRow()但不是range.appendRow()。希望这可以帮助某人。