Hug*_*ura 5 javascript google-sheets promise google-apps-script
我有一个表单,供用户输入数据,并使用onFormSubmit触发一个脚本,该脚本根据插入的数据创建CSV,并在创建CSV文件后删除数据。问题是我在创建CSV文件之前删除了数据。通常,我只是打个电话,但我认为使用Google Apps脚本是不可能的。有其他选择吗?
所以我的完整代码在这里:
关于它的作用的更多见解:当我收到新的表单条目时,“ Avaliacao”工作表将更新并触发testTrigger()。
然后,它将在LastUser城市中写入电子邮件和用户名,以便它可以查找一些用于构建CSV文件的数据。但是,在工作表完成其VLOOKUP调用之前,将调用saveAsCsv函数。因此我的CSV文件为空。
同步存在的另一个问题是,如果启用该sLastUser.clear();行,它也会在创建CSV之前删除。
function testTrigger () {
//open the sheets
var SS = SpreadsheetApp.getActiveSpreadsheet();
var sAvaliacao = SS.getSheetByName("Avaliação");
var sPreCSV = SS.getSheetByName("PreCSV");
var sInput = SS.getSheetByName("Input");
var sLastUser = SS.getSheetByName("LastUser");
var dAvaliacao = sAvaliacao.getDataRange().getValues();
var dInput = sInput.getDataRange().getValues();
var avaliacaoLastRow = sAvaliacao.getLastRow()-1;
var userEmail = dAvaliacao[avaliacaoLastRow][2];
var userCity = dAvaliacao[avaliacaoLastRow][5];
var userId = dInput[3][52];
sLastUser.appendRow([userEmail, userCity]);
saveAsCSV(userId);
// sLastUser.clear(); <== this is the line where I can`t enable
}
function saveAsCSV(csvName) {
// Name
var fileName = String(csvName) + ".csv"
// Calls convertcsv
var csvFile = convertOutputToCsv_(fileName);
// create the file on my drive
DriveApp.createFile(fileName, csvFile);
}
function convertOutputToCsv_(csvFileName) {
// open sheets
var sPreCSV = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PreCSV");
var cont = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Input").getDataRange().getValues()[3][50] + 1;
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PreCSV").getRange(1, 1, cont, 3);
try {
var data = ws.getValues();
var csvFile = undefined;
// Loop through the data in the range and build a string with the CSV data
if (data.length > 1) {
var csv = "";
for (var row = 0; row < data.length; row++) {
for (var col = 0; col < data[row].length; col++) {
if (data[row][col].toString().indexOf(",") != -1) {
data[row][col] = "\"" + data[row][col] + "\"";
}
}
// Join each row's columns
// Add a carriage return to end of each row, except for the last one
if (row < data.length-1) {
csv += data[row].join(",") + "\r\n";
}
else {
csv += data[row];
}
}
csvFile = csv;
}
return csvFile;
}
catch(err) {
Logger.log(err);
Browser.msgBox(err);
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用引擎 v8 Promise 是定义对象
小智 5
确实,Google Apps脚本使用的JS引擎不支持诺言(Logger.log(Promise);表明它是未定义的)。
为确保电子表格更改在继续进行之前生效,可以使用 SpreadsheetApp.flush()。
另一个相关功能是由事件在Form Submit上由触发器传递的事件对象:它将提交的数据传递到脚本,而不必将其从电子表格中删除。
| 归档时间: |
|
| 查看次数: |
4050 次 |
| 最近记录: |