有人可以幫助使全局變量不再是全局的。函數checkDate()需要能夠訪問(var = formatteddate)。我無法將全局變量與函數checkDate()結合在一起,因爲它只是一遍又一遍地重複ui.prompt。如何將全局變量與函數結合起來?
有關腳本的一點背景知識,通過ui.prompt輸入日期,年份取自該日期,並以數字格式放置爲(var = formatteddate)。
功能了checkdate(),檢查該年(VAR = formatteddate)中的所有行柱7.
功能filterRows(),從了checkdate取信息並過濾行。
複製和刪除工作表的腳本只是我測試的一部分,所以在測試腳本之前我不需要總是複製我的數據。
如果您要測試腳本,請創建兩張表,「主日誌」和「主日誌副本」。在「主日誌」中,從第2行開始,在H列(第7列)中放置一些日期。理想情況下,2016年和2017年的日期。查看正在進行的過濾。 「主日誌副本」將在每次運行時刪除/創建。
我的理想解決方案是將GLOBAL行與函數checkDate()結合起來。
謝謝! =)
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);
}
在我看來,'行[7] .getFullYear()=== formatteddate'是一個數字比較字符串,你確定這是正確的? – RobG