【问题标题】:Finding two elements within an array with IF statement using Apps Script使用 Apps 脚本使用 IF 语句在数组中查找两个元素
【发布时间】:2021-03-06 17:52:00
【问题描述】:

我对编程非常陌生,我正在尝试在 google 表格中的一维数组中找到两个连续的值,并且需要在 google 表格中以粗体突出显示答案。第一个值应大于 5(例如位于单元格 D10 中),下一个值应小于 4.99(位于 E10 中)。我尝试了两种方法,但似乎无法让代码工作 - 我不知道我是否过度复杂化了问题。第一种方法是将行分成 2 个单独的元素数组,这样如果元素 J 大于 5,并且元素 k(查看 J 旁边的元素)小于 4.99。

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var ui2 = SpreadsheetApp.getUi();
var data1 = ss.getRange(10,2,1,20).getValues()[0]; //Variable 1 - to find the ON value B10:U10
var data2 = ss.getRange(10,3,1,20).getValues()[0]; //to find the OFF value;
var onA = 5.00;
var on = data1 > onA;
var offA = 4.99;
var off = data2 < offA;

for(var i = 0; i < 20; i++){
for(var j = 0; j < 20; j++){

if(data1[i] < 5.00 && data2[j] < 4.99){

ss.getRange(10,2,1,20).setValue(data1[i]).setFontSize(12).setFontWeight("bold"); 
ss.getRange(10,3,1,20).setValue(data2[j]).setFontSize(12).setFontWeight("bold"); 
break;
} 
else {
   ui2.alert("the values are not found");
   break;
 }}}}

我的另一种方法不是将单元格作为单个数组进行搜索 - 这很有效,但是一旦我向 else 语句添加一条消息以声明未找到值,它就会以与循环相同的次数重复此警报。

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var ui2 = SpreadsheetApp.getUi();

for(var j = 2; j < 22; j++){ // j is column number
for(var k = j+1; k < 23; k++){

var result = ss.getRange(10,j).getValue();
var result2 = ss.getRange(10,k).getValue();
var resulta = result > 5.00;
var resultb = result2 < 4.99;

  if (resulta == true && resultb == true) {

  ss.getRange(10,j).setValue(result).setFontSize(12).setFontWeight("bold");
  ss.getRange(10,k).setValue(result2).setFontSize(12).setFontWeight("bold");

  break;
  } else {
    break;
    ui2.alert('Values not found');
}}}}

任何帮助都会令人惊叹,非常感谢!

【问题讨论】:

  • 我能问一下您当前的剧本问题吗?
  • 看起来 getRange 参数错误,因为提到了 A3 和 C3,但 getRange 方法中的行是 10,而不是 3。

标签: javascript arrays if-statement google-apps-script


【解决方案1】:

试试这个:

function findconsecutives() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Sheet1')
  const rg=sh.getRange(10,2,1,20); 
  const vs=rg.getValues()[0];
  for(let i=0;i<vs.length-1;i++) {
    if(vs[i]<5 && vs[i+1]<4.99) {
      sh.getRange(10,i+2,1,2).setFontSize(12).setFontWeight('bold');
      break;
    }
  }
  ss.toast('not found');
}

我只是将字体大小和字体粗细更改为符合要求的单元格,如果您想随意更改。我不想。

【讨论】:

  • 感谢您提供此代码。它工作得更好,但在满足 if 语句后使整行变为粗体。有什么方法可以突出显示这两个单元格 - 这个 if 语句的第一次出现?
  • 它应该只影响这两个单元格。但无论如何我不在乎这些点,所以如果你想改变它,自己改变它。
猜你喜欢
  • 2016-04-14
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多