【发布时间】:2020-05-06 04:39:38
【问题描述】:
我创建了一个谷歌应用脚本,允许我从谷歌表格创建一些谷歌文档模板。
代码如下:
function createDocument2 () {
var headers,i,L,scriptProps,tactics;
var endRowToRange,rangeForDate,sh,sheetTabName,ss,ssFileID,startRowToRange,templateId;
ssFileID = 'Google Sheet File ID';
templateId = 'Google Doc Template ID';
sheetTabName = "Google Sheet Tab Name";
ss = SpreadsheetApp.openById(ssFileID);
sh = ss.getSheetByName(sheetTabName);
endRowToRange = sh.getLastRow(); //The end row number will always be the last row in the sheet tab
Logger.log(endRowToRange);
scriptProps = PropertiesService.getScriptProperties();
startRowToRange = scriptProps.getProperty('startRow'); // Where the start row begins for this run of the code
/* endRowToRange = endRowToRange.toString(); //Needs to be a string to concatenate the A1 notation */
startRowToRange = startRowToRange.slice(0,startRowToRange.indexOf(".")); // Remove the decimal places FROM THE STRING
/* endRowToRange = endRowToRange.slice(0,endRowToRange.indexOf(".")); // Remove the decimal places */
Logger.log(endRowToRange);
if (!startRowToRange) {
startRowToRange = 2;
}
rangeForDate = 'A' + startRowToRange + ":I" + endRowToRange; // Build the A1 Notation for the data range
Logger.log('rangeForDate' + rangeForDate);
// Where we fill the Google Docs template
headers = sh.Spreadsheets.Values.get(ssFileID,'A1:I1');
tactics = sh.Spreadsheets.Values.get(ssFileID,rangeForDate);
L = tactics.values.length;
var i;
for (i = 0; i < L; i ++) {
Logger.log (tactics);
var fpn = tactics.values[i][0];
var nom = tactics.values[i][1];
var cp = tactics.values[i][2];
var tel = tactics.values[i][3];
var email = tactics.values[i][4];
var type = tactics.values[i][5];
var prog = tactics.values[i][6];
var date = tactics.values[i][7];
var time = tactics.values[i][8];
var documentId = DriveApp.getFileById(templateId).makeCopy().getId();
DriveApp.getFileById(documentId).setName(fpn + ' ' + nom.toUpperCase());
var head = DocumentApp.openById(documentId).getHeader();
head.replaceText ('##FP##', fpn);
var body = DocumentApp.openById(documentId).getBody();
body.replaceText ('##NOM##', nom);
body.replaceText ('##CP##', cp);
body.replaceText ('##EMAIL##', email);
body.replaceText ('##TEL##', tel);
body.replaceText ('##TYPE##', type);
body.replaceText ('##PROG##', prog);
body.replaceText ('##DATE##', date);
body.replaceText ('##TIME##', time);
}
// Loop to retreive the values processed before
scriptProps.setProperty('startRow',endRowToRange + 1); // Save new start value
}
我已将此脚本复制到另一个文件夹,但它不再工作,它说“TypeError: Cannot read property 'Values' of undefined (line 37, file "Code") - Google Apps Scrit”。
当我从我的初始文件夹运行它时,它运行良好。
有人对这个问题有想法吗?
提前谢谢你。 马特
【问题讨论】:
-
你试过换成
headers = sh.getRange('A1:I1').getValues(); tactics =sh.getRange(rangeForDate).getValues(); -
嗨@Ghost,谢谢你的回答。我试过了,但它也不起作用。我不再有错误,但它没有创建我的模板。我是否也应该更改以下值?提前感谢您的帮助。
-
嗨@matthiew 很难这样看。我真的需要看看你的电子表格,看看它为什么不起作用。也许如果您可以发布示例表的链接并描述您想要实现的目标,我可以提供帮助
-
嗨@Ghost,谢谢你的回答。我会尽量轻松地向你解释。我有一个接收一些潜在客户的登录页面。所有潜在客户都会自动存储到谷歌表格中。我有 3 个登录页面正在运行,所以在我的 google 表格文件中,我有 3 个选项卡,例如:LP 1、LP 2、LP 3。一旦数据存储在 google 表格中,上面共享的脚本将创建一些潜在页面客户数据自动。该脚本查找添加的新数据,然后创建 google doc 潜在客户页面。
-
@Ghost 我有 3 个文件夹,例如:LP 1、LP 2、LP 3,它们都包含 google doc 模板和脚本,因此可以存储潜在客户页面,我们可以从哪个登录页面知道潜在客户来。在文件夹 LP 1 上,当我运行脚本时,它正在工作。在 LP 2 和 LP 3 文件夹中,脚本正在执行上述错误。
标签: javascript google-apps-script google-sheets google-docs