2017-08-31 68 views
0

我正在通过使用Google工作表https://developers.google.com/apps-script/articles/mail_merge#section-4-more-powerful-templates进行基本邮件合并。Apps脚本getRowsData函数已被弃用?

该代码示例包含以下(我已修改):

function sendEmails() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 


var mainSheet = ss.getSheetByName("Main"); 
var templateSheet = ss.getSheetByName("Campaigns"); 

var emailTemplate = templateSheet.getRange("A1").getValue(); 

// Create one JavaScript object per row of data. 
objects = getRowsData(dataSheet, dataRange); 

// For every row object, create a personalized email from a template and send 
// it to the appropriate person. 
for (var i = 0; i < objects.length; ++i) { 
// Get a row object 
var rowData = objects[i]; 

// Generate a personalized email. 
// Given a template string, replace markers (for instance ${"First Name"}) with 
// the corresponding value in a row object (for instance rowData.firstName). 
var emailText = fillInTemplateFromObject(emailTemplate, rowData); 
var emailSubject = "Tutorial: Simple Mail Merge"; 

MailApp.sendEmail(rowData.emailAddress, emailSubject, emailText); 
} 
} 

我无法在https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet以找到“getRowsData”的参考。

这是否被弃用?

回答

1

你只需要向下滚动一下。

function getRowsData(sheet, range, columnHeadersRowIndex) { 
    columnHeadersRowIndex = columnHeadersRowIndex || range.getRowIndex() - 1; 
    var numColumns = range.getEndColumn() - range.getColumn() + 1; 
    var headersRange = sheet.getRange(columnHeadersRowIndex, range.getColumn(), 1, numColumns); 
    var headers = headersRange.getValues()[0]; 
    return getObjects(range.getValues(), normalizeHeaders(headers)); 
} 

您可能错过了所有这一切。

////////////////////////////////////////////////////////////////////////////////////////// 
// 
// The code below is reused from the 'Reading Spreadsheet data using JavaScript Objects' 
// tutorial. 
// 
////////////////////////////////////////////////////////////////////////////////////////// 

// getRowsData iterates row by row in the input range and returns an array of objects. 
// Each object contains all the data for a given row, indexed by its normalized column name. 
// Arguments: 
// - sheet: the sheet object that contains the data to be processed 
// - range: the exact range of cells where the data is stored 
// - columnHeadersRowIndex: specifies the row number where the column names are stored. 
//  This argument is optional and it defaults to the row immediately above range; 
// Returns an Array of objects. 
function getRowsData(sheet, range, columnHeadersRowIndex) { 
    columnHeadersRowIndex = columnHeadersRowIndex || range.getRowIndex() - 1; 
    var numColumns = range.getEndColumn() - range.getColumn() + 1; 
    var headersRange = sheet.getRange(columnHeadersRowIndex, range.getColumn(), 1, numColumns); 
    var headers = headersRange.getValues()[0]; 
    return getObjects(range.getValues(), normalizeHeaders(headers)); 
} 

// For every row of data in data, generates an object that contains the data. Names of 
// object fields are defined in keys. 
// Arguments: 
// - data: JavaScript 2d array 
// - keys: Array of Strings that define the property names for the objects to create 
function getObjects(data, keys) { 
    var objects = []; 
    for (var i = 0; i < data.length; ++i) { 
    var object = {}; 
    var hasData = false; 
    for (var j = 0; j < data[i].length; ++j) { 
     var cellData = data[i][j]; 
     if (isCellEmpty(cellData)) { 
     continue; 
     } 
     object[keys[j]] = cellData; 
     hasData = true; 
    } 
    if (hasData) { 
     objects.push(object); 
    } 
    } 
    return objects; 
} 

// Returns an Array of normalized Strings. 
// Arguments: 
// - headers: Array of Strings to normalize 
function normalizeHeaders(headers) { 
    var keys = []; 
    for (var i = 0; i < headers.length; ++i) { 
    var key = normalizeHeader(headers[i]); 
    if (key.length > 0) { 
     keys.push(key); 
    } 
    } 
    return keys; 
} 

// Normalizes a string, by removing all alphanumeric characters and using mixed case 
// to separate words. The output will always start with a lower case letter. 
// This function is designed to produce JavaScript object property names. 
// Arguments: 
// - header: string to normalize 
// Examples: 
// "First Name" -> "firstName" 
// "Market Cap (millions) -> "marketCapMillions 
// "1 number at the beginning is ignored" -> "numberAtTheBeginningIsIgnored" 
function normalizeHeader(header) { 
    var key = ""; 
    var upperCase = false; 
    for (var i = 0; i < header.length; ++i) { 
    var letter = header[i]; 
    if (letter == " " && key.length > 0) { 
     upperCase = true; 
     continue; 
    } 
    if (!isAlnum(letter)) { 
     continue; 
    } 
    if (key.length == 0 && isDigit(letter)) { 
     continue; // first character must be a letter 
    } 
    if (upperCase) { 
     upperCase = false; 
     key += letter.toUpperCase(); 
    } else { 
     key += letter.toLowerCase(); 
    } 
    } 
    return key; 
} 

// Returns true if the cell where cellData was read from is empty. 
// Arguments: 
// - cellData: string 
function isCellEmpty(cellData) { 
    return typeof(cellData) == "string" && cellData == ""; 
} 

// Returns true if the character char is alphabetical, false otherwise. 
function isAlnum(char) { 
    return char >= 'A' && char <= 'Z' || 
    char >= 'a' && char <= 'z' || 
    isDigit(char); 
} 

// Returns true if the character char is a digit, false otherwise. 
function isDigit(char) { 
    return char >= '0' && char <= '9'; 
} 

可以使用在右上角的拷贝图标,如下所示的图像中:

enter image description here

+0

感谢您指出。 – user61629

-2

库珀,

教程页上的示例代码(https://developers.google.com/apps-script/articles/mail_merge)标记为“完整代码”不包含您发布的getRowsData声明。因此,使用复制图标将不起作用,因为复制的代码缺少getRowsData函数声明。要访问代码的getRowsData函数部分,您需要复制模板电子表格并打开脚本编辑器以查看代码。