2014-02-07 3 views
0

Я написал сценарий электронной таблицы приложений Google, который должен взять pdf-файл с моего диска и отправить его по электронной почте в виде вложения для многих людей, каждому из которых будет отправлен уникальный файл. Данные находятся в электронной таблице. Первый столбец имеет адрес электронной почты получателя, второй столбец имеет имя файла pdf, которое должно быть прикреплено, а третий столбец имеет имя человека.Неожиданное исключение после продолжения сериализации

function sendPDFs() { 
var sheet = SpreadsheetApp.getActiveSheet(); 
var startRow = 2; // First row of data to process 
var numRows = sheet.getDataRange().getLastRow() -1; // Number of rows to process 

// Fetch the range of cells A2:C3 
var nummails = 0 
var numdrive = 0 
var checkCol = 4 
var dataRange = sheet.getRange(startRow, 1, numRows, 3) 

// Fetch values for each row in the Range. 
var data = dataRange.getValues(); 
for (i in data) { 
var row = data[i]; 
var emailAddress = row[0]; // First column 

var subject = "Some subject"; 

var body = 'Dear ' + row[2] + '\n\nPlease find your ' + subject + ' \n\nThank you \n\n XYZ' 

var attachment = row[1]; // Second column. 

var files = DriveApp.getFilesByName(attachment); // Get all files with name. 
var blobs = []; // Array for attachment. 

// Move files into blobs 
while (files.hasNext()) { 
var file = files.next(); 
    blobs.push(file.getAs("application/PDF")); 
} 

// dont sent to invalid email ids or those without email ids 
if (emailAddress == "" || emailAddress.indexOf("@") <= -1){ 
    sheet.getRange(i+2, checkCol+1).setValue('Not Emailed') 
    numdrive = numdrive+1 
    } 
    else{ 
    Utilities.sleep(1000) 
    MailApp.sendEmail(emailAddress, subject, body, {attachments: blobs, name: "XYZ" }) 
    sheet.getRange(i+2, checkCol+1).setValue('Emailed') 
    nummails = nummails +1 
    } 

    } 
Browser.msgBox(nummails+ " Mails sent successfully.") 
} 

Я получаю сообщение об ошибке Неожиданное исключение при продолжении сериализации. Тем не менее, электронные письма отправляются. Похоже, код работает, но я не знаю, почему ошибка. Я видел существующие потоки с одинаковой ошибкой, но они помогают.

Оцените, как это решить.

ответ

0

Кажется, что ваш основной цикл не выполняет то, что вы ожидали: значение i было неправильным в цикле. Я изменил определение петли следующим образом:

for (var i=0 ; i<data.length ; ++i) { 

, пожалуйста, попробуйте и сообщите нам, что произойдет.

+0

Я заменил цикл for выше. По-прежнему получается такая же ошибка. – user1327454

+0

hmmm ... Я получаю еще одну ошибку: «К сожалению, в настоящее время нет доступных серверов. Подождите немного и попробуйте еще раз», пытаясь получить что-то из pdf ... –

+0

Эй вы используете новый формат электронных таблиц ? : если да, см. https://code.google.com/p/google-apps-script-issues/issues/detail?id=3579 Это объясняет, по крайней мере, мою проблему. –

0

Во-первых, посмотрите на «Execution transcript» в меню редактора сценариев. Вы можете найти причину ошибки там.

Каждый раз, когда вы запускаете скрипт, Google Apps Script записывает исполнение транскрипт, который является записью каждого звонка на службы Google Apps Script, который сделан в то время как скрипт работает. Эти стенограммы могут помочь вам понять, какие действия выполнял ваш скрипт. Чтобы просмотреть стенограмму исполнения , нажмите на Вид> Строка выполнения в строке меню после завершения скрипта.

Обычно я получаю эти ошибки (исключения), когда достигаю некоторых ограничений (квот) скриптов Google Apps. См. Здесь: https://docs.google.com/macros/dashboard (переход на квоты вкладок).

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