2014-12-09 2 views
0

Целью является сбор данных gmail из входящих и исходящих сообщений из всех ярлыков и запись информации в различные таблицы, соответствующие метке, к которой они принадлежат.Создание электронных таблиц и заполнение их конкретными данными

По существу - метка определит, к какой электронной таблице относятся ее соответствующие данные gmail. В настоящее время я все настраиваю в одну таблицу. Этот метод скоро станет неуправляемым.

for (var l = 0; l < labels.length; l++) {// ** Runs a for-loop over "labels array". 
     var label = labels[l].getName();//Gets "this" label name.  
     var labelThreads = GmailApp.getUserLabelByName(label).getThreads(start, end);//Gets threads in "this" label. (*Set Limits Here*) 
     var labelMessages = GmailApp.getMessagesForThreads(labelThreads);//Gets array with each email from "this" thread. 

    for (var t = 0; t <labelThreads.length; t++){// ** Runs a for-loop over threads in a label. 
     if (labelMessages[t] == undefined){}// If it's empty, skip. 
     else {// If it's not empty. 
      emailBody.push([" "]);  
      emailFrom.push([labelMessages[t][0].getFrom()]); 
      emailTo.push([labelMessages[t][0].getTo()]); 
      emailDate.push([Utilities.formatDate(labelMessages[t][0].getDate(), "GMT", "MMM d, EEE, yyyy - HH:mm")]); 
      emailSubject.push([labelMessages[t][0].getSubject()]); 
      emailLabel.push([labels[l].getName()]); 
     } 
} 

    // ** THEN, LOG THE FILLED DATA ARRAYS TO ROWS ** 
    //getSheetValues(startRow, startColumn, numRows, numColumns) 
    mySheet.getRange(2,2,emailLabel.length,1).setValues(emailLabel); 
    mySheet.getRange(2,4,emailFrom.length,1).setValues(emailFrom); 
    mySheet.getRange(2,3,emailTo.length,1).setValues(emailTo); 
    mySheet.getRange(2,1,emailDate.length,1).setValues(emailDate); 
    mySheet.getRange(2,5,emailSubject.length,1).setValues(emailSubject); 
    mySheet.getRange(2,6,emailBody.length,1).setValues(emailBody); 
    } 
} 

В то время как я был в состоянии создать программно таблицы с теми же именами, как и все мои этикетки, я не знаю, как выбрать и заполнить их с правильными данными по электронной почте.

Я понимаю, что мой код в настоящее время работает, потому что такое же количество электронной почты данных фиксируется в каждом массиве, поэтому все строки данных «строка-вверх» (эта информация предоставляется по телефону (начало, конец).

полный код здесь: http://pastie.org/9768890

Обновление- осветленный вопрос: конкретный вопрос это- как я могу отделить информацию, хранящуюся в arrays- emailFrom, emailTo, emailDate, почтовое сообщение, emailLabel, на отдельные листы - на этикетке. В таблице будет указано название электронной почты как название, и я хочу, чтобы все ema il, относящихся к этой метке, которая будет введена в эту таблицу.

+0

Есть ли проблема с кодом, или он работает, и вы просто не понимаете, почему? – John

+0

мой код не разбивает и не устанавливает данные в соответствующие электронные таблицы. он в настоящее время только собирает данные и устанавливает все это в 1 таблицу. поэтому есть проблема с кодом, и я не понимаю, как это сделать. - В моем операторе – mrcni

ответ

1

Вот один из способов, чтобы открыть конкретный документ электронной таблицы (не обязательно активный документ):

var ss = SpreadsheetApp.openById("id"); 

, где «идентификатор» представляет собой строку, представляющую идентификатор документа. Если URL-адрес вашей электронной таблицы «https://docs.google.com/spreadsheets/d/abc123/edit#gid=0», то идентификатор «abc123».

Оттуда вы можете получить доступ отдельных листов, как это:

var sheet = ss.getSheetByName("name"); 

где «имя» является строка, представляющая имя листа.

После того, как у вас есть ваши sheet переменной (или что вы хотите назвать его), вы можете вставить данные так же, как вы уже сделали: использовать getRange(), чтобы получить диапазон, в котором вы хотите данные, и setValues() на самом деле вставить данные.

+0

я дал уточненный вопрос, это полезно. другой вопрос является тактическим. как определить, соответствуют ли данные в разных массивах одному и тому же письму? все электронные письма по различным массивам расположены по одному и тому же номеру индекса во всех массивах, я думаю, мне нужно отслеживать, какие метки находятся по индексам, а затем перемещать данные по всем массивам в пределах этих индексов на соответствующий лист. – mrcni

+0

Справа. Если я правильно следую вашему коду, поскольку вы только переносите данные в различные массивы как группу, индексы должны быть синхронизированы; поэтому emailBody [1] должен содержать информацию из того же письма, что и emailFrom [1], и emailTo [1] и т. д. – John

Смежные вопросы