如何将全局变量与函数结合起来?
How to combine the Global variables with a function?
有人可以帮助使全局变量不再是全局变量吗?函数 checkDate() 需要能够访问 (var = formatteddate)。我无法将全局变量与 Function checkDate() 结合起来,因为它只是一遍又一遍地重复 ui.prompt。
脚本的一些背景知识,日期通过 ui.prompt 输入,年份从该日期开始,并以数字格式放置为 (var = formatteddate)。
函数 checkDate(),检查第 7 列中年份 (var = formatteddate) 的所有行。
函数 filterRows(),从 checkdate 获取信息并过滤行。
复制和删除 sheet 的脚本只是我测试的一部分,因此我不需要总是在测试脚本之前复制我的数据。
如果要测试脚本,请创建两个 sheet,'Master Log' 和 'Copy of Master Log'。在 'Master Log' 中,从第 2 行开始,将一些日期放在 H 列(第 7 列)下方。理想情况下是 2016 年和 2017 年的一些日期。查看过滤效果。 'Copy of Master Log' 将在每个 运行 上变为 deleted/created。
我理想的解决方案是将 GLOBAL 行与 Function 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);
}
在我看来 formatteddate(实际上只是一年)应该是 filterRows 的一部分。不需要 checkDate,因为它似乎不是特别可重用。
考虑:
function filterRows() {
// Do the prompt when necessary
var prompt = ui.prompt('Start Date', 'Enter a date in m/d/y format', ui.ButtonSet.OK_CANCEL);
// Don't convert to Date, just get the year
var year = prompt.getResponseText().split(/\//)[2];
...
// Do comparison, use function expression
var filteredData = data.filter(function(row) {
return row[7].getFullYear() == year; // Allow compare string to number
});
...
}
有人可以帮助使全局变量不再是全局变量吗?函数 checkDate() 需要能够访问 (var = formatteddate)。我无法将全局变量与 Function checkDate() 结合起来,因为它只是一遍又一遍地重复 ui.prompt。
脚本的一些背景知识,日期通过 ui.prompt 输入,年份从该日期开始,并以数字格式放置为 (var = formatteddate)。
函数 checkDate(),检查第 7 列中年份 (var = formatteddate) 的所有行。
函数 filterRows(),从 checkdate 获取信息并过滤行。
复制和删除 sheet 的脚本只是我测试的一部分,因此我不需要总是在测试脚本之前复制我的数据。
如果要测试脚本,请创建两个 sheet,'Master Log' 和 'Copy of Master Log'。在 'Master Log' 中,从第 2 行开始,将一些日期放在 H 列(第 7 列)下方。理想情况下是 2016 年和 2017 年的一些日期。查看过滤效果。 'Copy of Master Log' 将在每个 运行 上变为 deleted/created。
我理想的解决方案是将 GLOBAL 行与 Function 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);
}
在我看来 formatteddate(实际上只是一年)应该是 filterRows 的一部分。不需要 checkDate,因为它似乎不是特别可重用。
考虑:
function filterRows() {
// Do the prompt when necessary
var prompt = ui.prompt('Start Date', 'Enter a date in m/d/y format', ui.ButtonSet.OK_CANCEL);
// Don't convert to Date, just get the year
var year = prompt.getResponseText().split(/\//)[2];
...
// Do comparison, use function expression
var filteredData = data.filter(function(row) {
return row[7].getFullYear() == year; // Allow compare string to number
});
...
}