Könnte jemand bitte helfen, die globalen Variablen nicht mehr global zu machen. Auf die Funktion checkDate() muss zugegriffen werden können (var = formatdate). Ich bin nicht in der Lage, die globalen Variablen mit Function checkDate() zu kombinieren, da es immer wieder wiederholt das ui.prompt wiederholt.Wie kombiniert man die globalen Variablen mit einer Funktion?
Ein kleiner Hintergrund über das Skript, ein Datum wird über ein ui.prompt eingegeben, das Jahr wird von diesem Datum übernommen und als (var = formatiertes Datum) im Zahlenformat abgelegt.
Funktion checkdate() prüft alle Zeilen für das Jahr (var = formatteddate) in Spalte 7
Funktion filterRows(), die Informationen aus nimmt und filtert checkdate die Zeilen.
Das Skript, das das Blatt dupliziert und löscht, ist nur ein Teil meiner Tests, daher muss ich meine Daten vor dem Testen des Skripts nicht immer duplizieren.
Wenn Sie das Skript testen möchten, erstellen Sie bitte zwei Blätter, "Master Log" und "Kopie des Master Logs". In 'Master Log' Ab Zeile 2 legen Sie einige Daten in Spalte H (Spalte 7) ab. Idealerweise 2016 und 2017 Termine. Um die Filterung in Aktion zu sehen. 'Kopie des Master-Logs' wird bei jedem Lauf gelöscht/erstellt.
Meine ideale Lösung wäre, die GLOBAL-Zeilen mit der Funktion checkDate() zu kombinieren.
Vielen Dank! =)
var ui = SpreadsheetApp.getUi();
var prompt = ui.prompt('Start Date', 'Enter a date in m/d/y format', ui.ButtonSet.OK_CANCEL);
var date = new Date(prompt.getResponseText());
var formatteddate = Number(Utilities.formatDate(date, "PST", "yyyy"));
Logger.log(date);
Logger.log(formatteddate);
function checkDate(row) {
return (row[7].getFullYear() === formatteddate); // Check column B
Logger.log(row[7].getFullYear() === formatteddate)
}
function filterRows() {
var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = Spreadsheet.getSheetByName('Copy of Master Log');
var sheet2 = Spreadsheet.getSheetByName('Master Log');
Spreadsheet.deleteSheet(sheet1);
Spreadsheet.setActiveSheet(sheet2);
Spreadsheet.duplicateActiveSheet();
var headers = 1; // # rows to skip
var sheet = Spreadsheet.getSheetByName('Copy of Master Log');
var data = sheet.getDataRange().getValues();
var headerData = data.splice(0,headers); // Skip header rows
var filteredData = data.filter(checkDate);
var outputData = headerData.concat(filteredData); // Put headers back
Logger.log(filteredData)
sheet.clearContents(); // Clear content, keep format
// Save filtered values
sheet.getRange(1, 1, outputData.length, outputData[0].length).setValues(outputData);
}
Scheint mir 'row [7] .getFullYear() === formatteddate' eine Zahl in eine Zeichenfolge zu vergleichen, sind Sie sicher, das ist richtig? – RobG