簡體   English   中英

如何將全局變量與函數結合?

[英]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(),從檢查日期獲取信息並過濾行。

復制和刪除工作表的腳本只是我測試的一部分,因此在測試腳本之前,我不需要總是復制數據。

如果要測試腳本,請創建兩張紙,“主日志”和“主日志副本”。 在“主日志”中,從第2行開始,在H列(第7列)下放置一些日期。 理想情況是一些2016年和2017年的日期。 查看正在執行的過濾。 每次運行都會刪除/創建“主日志副本”。

我的理想解決方案是將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
  });

  ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM