【发布时间】:2019-12-21 23:04:17
【问题描述】:
我正在构建一个脚本,该脚本最终将从 csv 文件中获取数据,填充电子表格,使用该电子表格自动填充大量文档,然后自动将这些文档通过电子邮件发送给客户。它还将每次脚本运行时的文档移动到仅包含当天报告的新文件夹中。我对 Google Scripts 很陌生,这是我的学习项目。
到目前为止,我必须执行的步骤是使用虚拟数据为电子表格创建文档。
我最终创建了第二个脚本来发送电子邮件,它发送电子邮件,但它被设置为在文件夹中查找所有属于谷歌文档的文档,因此它将每个文档的副本发送给每个客户.我认为如果我将电子邮件指向原始电子表格以获取正确的文档 ID(而不是类型),我只能向客户发送属于他们的报告(全部为 PDF 格式)。创建一个新文件夹并将文档移入其中的步骤工作正常。
我遇到的问题是将数据输入到原始电子表格的文档 ID 列中。我已经能够看到它将第一个文档的文档 ID 放入列中具有要迭代的信息的每一行,然后用第二个文档的 ID 再次替换每一行,等等。
我寻找将数据添加到电子表格的方法。到目前为止,我发现的每种方法都涉及使用电子表格中数据的新信息创建新列或行。我需要输入我刚刚在电子表格之外创建的数据,然后将其放在正确的位置,以便以后可以指向它。
我已经浏览了文档中的方法。看起来 .getCell.setvalue(variable) 应该可以工作...如果我能找到一种方法从范围中获取单元格(这一直显示我超出范围)。
function createDocument() {
var headers = Sheets.Spreadsheets.Values.get('17jXy9IlLt8C41tWEG5iQR31GjzOftlJs73y2L_0ZWNM', 'A1:P1');
var tactics = Sheets.Spreadsheets.Values.get('17jXy9IlLt8C41tWEG5iQR31GjzOftlJs73y2L_0ZWNM', 'A2:P');
var templateId = '1DU13OJHWyYnO5mLFovm97pWwXuU7ZTTDVJb2Mpdeebk';
for(var i = 0; i < tactics.values.length; i++){
var customer = tactics.values[i][0];
var pcname = tactics.values[i][1];
var date = tactics.values[i][2];
var virusvalue = tactics.values[i][3];
var cpuuse = tactics.values[i][4];
var ramuse = tactics.values[i][5];
var harddrive = tactics.values[i][6];
var netuse = tactics.values[i][7];
var downtime = tactics.values[i][8];
var cpuperform = tactics.values[i][9];
var ramperform = tactics.values[i][10];
var harddiskperform = tactics.values[i][11];
var reccomend = tactics.values[i][13];
var custID = tactics.values[i][14];
var newdoc = tactics.values[i][15];
//Make a copy of the template file
var documentID = DriveApp.getFileById(templateId).makeCopy(DriveApp.getFolderById('1zV-WpzUKoRurE9FnBcfjBygBA5rCO67I')).getId();
//rename the copied file
DriveApp.getFileById(documentID).setName('MCHA ' + customer + ' - ' + pcname);
Logger.log('value1 ' + documentID);
//THIS IS THE AREA I'M TRYING TO FIX
var ss = SpreadsheetApp.openById('113aqWVAjjUYCmI2oFc_BTbXkWMPFPjk_SschsKEx6qU');
var cell = ss.getRange('P2:P').getCell([i], [15]);
cell.setValue(documentID);
SpreadsheetApp.flush();
Logger.log('value2 ' + documentID);
//This area has code to replace the tags in the document with values from the spreadsheet. I cut it for not being relevant.
}
}
显然,定义范围只会填充和自动填充每个单元格。该代码在我尝试时有效
我最初尝试使用之前列表中的变量进行自动填充,但后来我意识到这根本不起作用。
我尝试设置单元格范围,然后使用相同的符号([i][15] 等)设置当前单元格,这会引发“未找到范围”错误。我觉得我一定是遗漏了一些语法。
如果有帮助,下面是指向包含所有文档的文件夹的链接。 https://drive.google.com/drive/folders/1sRhti3R8R-Cym0hr2S4XkAVn3wyBbSRu?usp=sharing
【问题讨论】:
标签: google-apps-script google-sheets