Ich habe ein Formular erstellt, das alle Felddaten in ein Google-Formular einfügt, und ich habe ein Skript, das die Tabelle bei jeder Bearbeitung der Tabelle in eine CSV-Datei exportiert. Das Skript wird jedoch nur ausgeführt, wenn das Blatt geöffnet ist und auf dem Blatt bearbeitet wird. Wenn ich mein Formular absende, das das Tabellenblatt bearbeitet, wird der Auslöser nicht ausgelöst und der CSV wird nicht erstellt.Google App Script CSV exportieren onEdit, nicht onOpen
Unter meinem aktuellen Projekt Auslöser habe ich meine Veranstaltung oneedit laufen.
Wie kann ich meine Trigger auslösen, wenn das Blatt nicht geöffnet ist?
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Download Data",
functionName : "saveAsCSV"
}];
sheet.addMenu("Script Center Menu", entries);
};
function saveAsCSV() {
// Trash the previous csv file that was last updated.
var files = DriveApp.getFilesByName('myCSVFile.csv');
while (files.hasNext()) {
var file = files.next();
if (file.getLastUpdated()) {
file.setTrashed(true);
}
}
// Creates the file name
var fileName = ("myCSVFile");
// Check that the file name entered wasn't empty
if (fileName.length !== 0) {
// Add the ".csv" extension to the file name
fileName = fileName + ".csv";
// Convert the range data to CSV format
var csvFile = convertRangeToCsvFile_(fileName);
// Create a file in the Docs List with the given name and the CSV data
DriveApp.createFile(fileName, csvFile);
}
else {
Browser.msgBox("Error: Please enter a CSV file name.");
}
}
function convertRangeToCsvFile_(csvFileName) {
try {
var csvFile = undefined;
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var data = rows.getValues();
// 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);
}
}
Versuchen Sie, die Funktion für 'onFormSubmit()' Trigger – iJay
zu schreiben Wird das funktionieren, auch wenn es ein externes Formular ist? Kein Google-Formular? – cgrouge
Ich werde versuchen, ändern 'var sheet = SpreadsheetApp.getActiveSpreadsheet();' für openById – Harold