0

Я пытаюсь получить Google, чтобы отправить мне отправленную информацию из формы. Я могу заставить его работать с листом по умолчанию (Form Responses). Но я использую отдельный лист под названием «ConversionTracker», который фактически использует функцию запроса для импорта данных из листа по умолчанию во второй лист, поэтому я могу использовать формулы внутри ответы. В основном, я хочу, чтобы сценарий электронной почты ссылался на второй лист, а не на первый лист, когда он отправил электронное письмо последнего сообщения. Каждый раз, когда я использую скрипт, я отправляю данные с первого листа (ответы формы), а не на лист названный «Tracker Tracker». Я пробовал разные варианты скрипта, но я не могу его получить. См. Скрипт ниже.Google Form Script - Представление электронной почты

function Initialize() { 

try { 

var triggers = ScriptApp.getProjectTriggers(); 

for (var i in triggers) 
    ScriptApp.deleteTrigger(triggers[i]); 

ScriptApp.newTrigger("EmailGoogleFormData") 
    .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()) 
    .onFormSubmit().create(); 

} catch (error) { 
throw new Error("Please add this code in the Google Spreadsheet"); 
} 
} 

    function EmailGoogleFormData(e) { 

if (!e) { 
    throw new Error("Please go the Run menu and choose Initialize"); 
} 

    try { 

if (MailApp.getRemainingDailyQuota() > 0) { 


    // You may replace this with another email address 
    var email = "dustin.****@b****.com"; 

    // Enter your subject for Google Form email notifications 
    var subject = "Google Form Submitted"; 

    var key, entry, 
    message = "", 
    ss = SpreadsheetApp.getActiveSheet(), 
    sheet = ss.getSheets()["ConversionTracker"], 
    ss.setActiveSheet(sheet), 
    cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0]; 

    // Iterate through the Form Fields 
    for (var keys in cols) { 

    key = cols[keys]; 
    entry = e.namedValues[key] ? e.namedValues[key].toString() : ""; 

    // Only include form fields that are not blank 
    if ((entry !== "") && (entry.replace(/,/g, "") !== "")) 
     message += key + ' :: ' + entry + "\n\n"; 
    } 

    MailApp.sendEmail(email, subject, message); 
} 
} catch (error) { 
    Logger.log(error.toString()); 
} 
    } 

Сценарий, который работает и передает данные с первого листа:

function Initialize() { try {

var triggers = ScriptApp.getProjectTriggers(); 

for (var i in triggers) 
    ScriptApp.deleteTrigger(triggers[i]); 

ScriptApp.newTrigger("EmailGoogleFormData") 
    .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()) 
    .onFormSubmit().create(); 
} catch (error) { 
throw new Error("Please add this code in the Google Spreadsheet"); } } function EmailGoogleFormData(e) { 
if (!e) { 
throw new Error("Please go the Run menu and choose Initialize"); } 
try { 

if (MailApp.getRemainingDailyQuota() > 0) { 

    // You may replace this with another email address 
    var email = "dustin****@b****.com"; 

    // Enter your subject for Google Form email notifications 
    var subject = "Google Form Submitted"; 

    var key, entry, 
    message = "", 
    ss = SpreadsheetApp.getActiveSheet(), 
    cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0]; 

    // Iterate through the Form Fields 
    for (var keys in cols) { 

    key = cols[keys]; 
    entry = e.namedValues[key] ? e.namedValues[key].toString() : ""; 

    // Only include form fields that are not blank 
    if ((entry !== "") && (entry.replace(/,/g, "") !== "")) 
     message += key + ' :: ' + entry + "\n\n"; 
    } 

    MailApp.sendEmail(email, subject, message); 
} } catch (error) { 
Logger.log(error.toString()); } } 

ответ

0

Я не думаю, что вы можете использовать текст в квадратных скобках, чтобы получить лист:

sheet = ss.getSheets()["ConversionTracker"] 

Я бы использовал метод .getSheetByName().

getSheetByName("ConversionTracker"); 

Код:

ss = SpreadsheetApp.getActiveSpreadsheet(); 
sheet = ss.getSheetByName("ConversionTracker"); 
+0

Привет, я получаю сообщение в журнале "[15-10-27 12: 09: 01: 639 EDT] TypeError: Не удается найти функцию getSheetByName в объекте Sheet «. когда я пытаюсь изменить это. смотри ниже код я изменил .. ключ вар, вход, сообщение = "", сс = SpreadsheetApp.getActiveSheet(), лист = ss.getSheetByName ("ConversionTracker"); ss.setActiveSheet (лист); var cols = ss.getRange (1, 1, 1, ss.getLastColumn()). GetValues ​​() [0]; –

+0

Вы используете переменную с именем 'ss', которая обычно используется для * электронной таблицы *. Но вы назначаете активный лист переменной 'ss'. Используйте 'ss = SpreadsheetApp.getActiveSpreadsheet();' –

+0

Привет, sandy, я получаю сообщение об ошибке вместе с этим »[15-10-27 10: 10: 10: 559 PDT] InternalError: Не удается найти метод setActiveSheet ((класс))." Мой скрипт: var key, entry, message = "", ss = SpreadsheetApp.getActiveSpreadsheet(), sheet = ss.getSheets() ["ConversionTracker"]; ss.setActiveSheet (лист); var cols = ss.getRange (1, 1, 1, ss.getLastColumn()). GetValues ​​() [0]; –

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