gpt4 book ai didi

javascript - 如何仅更改 "true"行的背景颜色?

转载 作者:行者123 更新时间:2023-12-03 05:03:38 26 4
gpt4 key购买 nike

如何仅更改原始工作表“Pasco”上的函数 checkDate(row) 的(true)行的背景颜色?这可能吗?

关于脚本的一些信息:

通过函数 getDateRange() 输入日期范围,通过函数 checkDate(row) 检查工作表“Pasco”中的所有行是否符合该日期范围。 。如果确实满足日期范围 (true),函数 filterRows() 本质上会过滤“Pasco”工作表中的行,并将它们移动到另一个工作表“Copy of Pasco”。

问我的问题的另一种方式是,如何获得工作表“Pasco”中“真实”的所有行的范围。如果“Pasco”没有按日期排序,这可能意味着多个范围,对吧?一旦我有了一个范围,我就可以轻松地改变背景。

如果您要测试脚本,请创建两个工作表:“Pasco”和“Pasco 副本”。在“Pasco”中,从第 2 行开始,将一些日期放在第 I 列(第 8 列)下方。查看正在执行的过滤。每次运行时都会删除/创建“Pasco 副本”。

感谢您的宝贵时间=)

var globalStartDate;
var globalEndDate;

function getDateRange(){

var startui = SpreadsheetApp.getUi();
var startprompt = startui.prompt('Start Date', 'Enter a date in m/d/y format', startui.ButtonSet.OK_CANCEL);
var startdate = new Date(startprompt.getResponseText());
var startdatemilliseconds = startdate.getTime();
Logger.log(startdate);
Logger.log(startdatemilliseconds);
globalStartDate = startdatemilliseconds;

var endui = SpreadsheetApp.getUi();
var endprompt = endui.prompt('End Date', 'Enter a date in m/d/y format', endui.ButtonSet.OK_CANCEL);
var enddate = new Date(endprompt.getResponseText());
var enddatemilliseconds = enddate.getTime();
Logger.log(enddate);
Logger.log(enddatemilliseconds);
globalEndDate = enddatemilliseconds;
}

function checkDate(row) {

Logger.log(row[8].getTime() <= globalEndDate && row[8].getTime() >= globalStartDate);
return (row[8].getTime() <= globalEndDate && row[8].getTime() >= globalStartDate); // Check column H
}

function filterRows() {

var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = Spreadsheet.getSheetByName('Pasco');
var sheetdelete = Spreadsheet.getSheetByName('Copy of Pasco');

Spreadsheet.deleteSheet(sheetdelete);
Spreadsheet.setActiveSheet(sheet1);
Spreadsheet.duplicateActiveSheet();

var headers = 1; // # rows to skip
var sheet2 = Spreadsheet.getSheetByName('Copy of Pasco');
var range = sheet1.getDataRange();
var data = range.getValues();
var headerData = data.splice(0,headers); // Skip header rows
getDateRange();
var filteredData = data.filter( checkDate );
var outputData = headerData.concat(filteredData); // Put headers back
Logger.log(filteredData)

sheet2.clearContents(); // Clear content, keep format

// Save filtered values
sheet2.getRange(1, 1, outputData.length, outputData[0].length).setValues(outputData);
}

最佳答案

抱歉,我没有时间阅读您的代码并给您完整的答案,但您可以添加一个循环来遍历工作表并将每行的背景颜色设置为“true”。

在下面的脚本中,我假设“true”位于 A 列中。

function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var data = sheet.getRange(1, 1, sheet.getLastRow()).getValues();
var lastCol = sheet.getMaxColumns();

for (var i = 0; i < data.length; i ++){
if(data[i][0] == true){
sheet.getRange(i + 1, 1, 1, lastCol).setBackground('Yellow');
}
}
}

编辑

在过滤行函数中调用 getDateRange() 后插入此代码。

  var lastCol = sheet1.getMaxColumns(); 

for(var i = headers; i < data.length ; i++){
if(data[i][8].getTime() <= globalEndDate && data[i][8].getTime() >= globalStartDate){
sheet1.getRange(i, 1, 1, lastCol).setBackground('Yellow');
}
}

您的过滤行函数现在应如下所示:

function filterRows() {

var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = Spreadsheet.getSheetByName('Pasco');
var sheetdelete = Spreadsheet.getSheetByName('Copy of Pasco');

Spreadsheet.deleteSheet(sheetdelete);
Spreadsheet.setActiveSheet(sheet1);
Spreadsheet.duplicateActiveSheet();

var headers = 1; // # rows to skip
var sheet2 = Spreadsheet.getSheetByName('Copy of Pasco');
var range = sheet1.getDataRange();
var data = range.getValues();
var headerData = data.splice(0,headers); // Skip header rows
getDateRange();

var lastCol = sheet1.getMaxColumns();
for(var i = headers; i < data.length ; i++){
if(data[i][8].getTime() <= globalEndDate && data[i][8].getTime() >= globalStartDate){
sheet1.getRange(i + headers, 1, 1, lastCol).setBackground('Yellow');
}
}

var filteredData = data.filter( checkDate );
var outputData = headerData.concat(filteredData); // Put headers back
Logger.log(filteredData)

sheet2.clearContents(); // Clear content, keep format

// Save filtered values
sheet2.getRange(1, 1, outputData.length, outputData[0].length).setValues(outputData);
}

关于javascript - 如何仅更改 "true"行的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42103059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com