2016-09-21 82 views
0

然後在電子表格中,我複製下面代碼以獲取電子郵件,獲取plainbody(),日期和消息,將它們帶入COLUMN A中的Google工作表。下列式C使用谷歌腳本在電子郵件PlainBody()MSG上拆分數組函數

=ARRAYFORMULA(IFERROR(SPLIT(A3,"|"))) 

(我測試了這個工程,以及 - 不知道,如果一個是首選)

=SPLIT($A2,"|") 

我想這些功能結合起來,並試圖以下

function getEmails() { 

    var ss = SpreadsheetApp.getActiveSheet(); 
    var threads = GmailApp.search("is:starred in:TanWebOppCRM"); 

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

     for (var j=0; j<messages.length; j++) { 
      var msg = messages[j].getPlainBody(); 
      var dat = messages[j].getDate(); 

      var msgParse = '=SPLIT($A2,"|")'; 
      /*var msgParse = '=ARRAYFORMULA(IFERROR(SPLIT($A2,"|")))';*/ 
      ss.appendRow([msg, dat, msgParse]); 
     } 
     threads[i].moveToTrash(); 
    } 
} 

這不 「工作」。例如 - 我知道我只是給自己發送了一封可以提取的測試郵件。我知道的下一行,將被追加爲行30 - 和代碼

var msgParse = '=SPLIT($A2,"|")'; 

改變

var msgParse = '=SPLIT($A30,"|")'; 

然後提取的作品,你可以看到分裂發生。 如果我是進口2個新行 - 顯然

$A30 /* stays A30 - so I tried- 
var msgParse = '=SPLIT($A[j],"|")'; 

只是爲了看看是否[j]動態變化 - 儘管我知道j是消息循環

的問題...

  • 我怎麼以下行遞增到append行值 使每一個循環會改變該行參考appende d行 - 所以,如果我是從行30日起

    var msgParse = '=SPLIT($A30,"|")'; 
    var msgParse = '=SPLIT($A31,"|")'; 
    var msgParse = '=SPLIT($A32,"|")'; 
    

是增量msgParse值數據將是什麼。

回答

0

您可以通過構建字符串連接公式。
如果你總是隻追加你可以得到的最後一行,並添加1(因爲新行會低於一排),並用其作爲行引用:

var msgParse = '=SPLIT($A' + (ss.getLastRow() + 1) + ', "|")'; 
+0

我嘗試了十幾種不同的方式,包括接近這一點 - 但從來沒有確切的。問題雖然 - 我即將嘗試 - 如果他們是更多的「報價或一開始就缺少一個? –

+0

對不起,我搞砸了單引號和雙引號,請檢查更新的答案 –

+0

我開始於」在開始然後意識到上述,並提出了相同的事情。但是,但它不再解析。在編輯器中 - 我注意到「工作表」不是藍色的。看我的原始腳本 - 它沒有在下面聲明。但是我所做的最後幾件事情都是錯誤的或者沒有處理。你有什麼想法?只要我確認它的工作,我就立即接受你的答案。 –

0

由於我是新來的腳本 - 我找不到這個答案 - 我想添加我自己的答案。

@Robin明確指出了我的正確方向 - 我沒有意識到我可以使用字符串連接 - 但是提供的解決方案並沒有增加,並且一旦寫入了字符串連接,它就會保留FOR循環的其餘部分

最後一塊被添加計數器 - 我可能消除第一行=變量,有可能是一種方法,使這種更有效,但它採取了在Gmail中的20個樣本電子郵件和解析他們到電子表格中,也許6或7秒。

function getEmails() { 

    var ss = SpreadsheetApp.getActiveSheet(); 
    var threads = GmailApp.search("is:starred in:TannerWebOppCRM"); 
    var row = ss.getLastRow(); 

    for (var i=0; i<threads.length; i++) { 
     var messages = threads[i].getMessages(); 
     var newrow = row + 1; 

     for (var j=0; j<messages.length; j++) { 
      var msg = messages[j].getPlainBody(); 
      var dat = messages[j].getDate(); 
      var msgParse ='=SPLIT($A'+ (newrow) + ', "|")'; 
      ss.appendRow([msg, dat, msgParse]); 
      newrow = newrow + 1; 
     } 
     threads[i].moveToTrash(); 
    } 
} 

要完成這個職位,我想包括更新和除了我接受,因爲,在技術上回答我的問題的答案 - 只是沒有把它的來龍去脈如何讓它在我的劇本工作。

+0

很高興你可以得到它的工作。下次嘗試提供樣本數據,那樣的話誰也應該有機會驗證他們答案的正確性。 –

+0

@robin - 我本來會遇到拆分問題,但在我原來的問題中,我已確認拆分工作了2或3種不同的方式。我還發布了你的建議做了拆分。對於驗證數據來說,這種方法的效果是**沒有** - 除了數據樣本,通過查看拆分數據將像一些數據一樣簡單。爲什麼我發佈的答案是,你的答案是不完整的 - 因爲腳本的內容和它需要增加的事實在初始腳本中是可見的。除了答案外,其他每個變量都是FOR循環中的增量。 –

相關問題