尝试对使用 Google 表单进行数据输入的 Google 工作表进行条件格式化

Trying to conditional format Google sheet that uses a Google form for data entry

提问人:maburgess 提问时间:10/30/2023 更新时间:10/30/2023 访问量:21

问:

我已转向使用谷歌表单进行数据输入,以尝试提高数据完整性。但是,在将新条目添加到工作表底部后,条件格式将被抛弃。这意味着必须不断手动更改格式范围,这不是很多工作,但当您想让工作表自行运行时,这有点令人沮丧。

我是应用程序脚本(以及一般编码)的新手,但一直在尝试拼凑一些可能有效的东西。我希望 A 列 (A4:A) 中的单元格根据单元格的值更改颜色。到目前为止,我有以下内容 - 它适用于第 4 行,但不适用于其他行。我正在努力让代码识别出第一行下方有更多数据。

我收到的错误说:

“数据中的行数与范围内的行数不匹配。数据有 1,但范围有 196。

function conditionalformatting(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Warehouse Queries');
  var range = sheet.getRange(4,1,sheet.getLastRow(),1);
  var cellvalues= range.getValues(); 
  var colors = [];

     if (cellvalues = 'Warehouse Admin to Action') {
      colors.push(["#6db05f"]);} 
      else if (cellvalues = 'Warehouse Coordinator to Action') {
      colors.push(["#f0c784"]);} 
      else if (cellvalues = 'POD required - Supply Chain to source') {
      colors.push(["#84bef0"]);} 
      else {colors.push([""]);}

      range.setBackgrounds(colors);
      }

谢谢!

if-statement google-apps-script google-sheets 格式化 getvalue

评论


答:

0赞 Tanaike 10/30/2023 #1

修改要点:

  • 我认为在你的脚本中,总是运行。因为被用作 true。并且,意味着 的文本被替换为 varible 。如果要比较该值,请使用 或 代替。colors.push(["#6db05f"])cellvalues = 'Warehouse Admin to Action'cellvalues = 'Warehouse Admin to Action''Warehouse Admin to Action'cellvalues======
  • 而且,我认为在你的剧本中,总是.colors["#6db05f"]
  • var range = sheet.getRange(4,1,sheet.getLastRow(),1);可能是 .而且,我认为这也可以使用。var range = sheet.getRange(4, 1, sheet.getLastRow() - 3, 1);var range = sheet.getRange("A4:A" + sheet.getLastRow());
  • 如果要将每个单元格值与 、 进行比较,则需要使用循环。'Warehouse Admin to Action''Warehouse Coordinator to Action''POD required - Supply Chain to source'

当这些要点反映在您的脚本中时,如何进行以下修改?

修改后的脚本:

function conditionalformatting(e) {
  var obj = {
    'Warehouse Admin to Action': "#6db05f",
    'Warehouse Coordinator to Action': "#f0c784",
    'POD required - Supply Chain to source': "#84bef0",
  };
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Warehouse Queries');
  var range = sheet.getRange("A4:A" + sheet.getLastRow());
  var cellvalues = range.getValues();
  var colors = cellvalues.map(([a]) => [obj[a] || null]);
  range.setBackgrounds(colors);
}
  • 运行此脚本时,将从“A4:A”中检索单元格值,并使用 设置背景颜色。并且,“A4:A”的背景颜色发生了变化。obj

  • 为了搜索值并设置颜色代码,我使用了 .obj

参考:

评论

0赞 maburgess 10/31/2023
工作完美 - 非常感谢您的帮助和解释!
0赞 Tanaike 10/31/2023
@maburgess 感谢您的回复。我很高兴您的问题已得到解决。也谢谢你。