查找单元格范围并附加特定单元格值

问题描述 投票:0回答:1

大家好,我需要帮忙处理我的代码。

我想做的是从一张纸中获取值并附加到另一张纸上,但我只会在仅查找特定列范围内的数字的条件下附加值,如果找到,我将在其周围附加值,如下所示:

function saveData() {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const sheets = ss.getSheets();
  const pricingWS = sheets[1]
  const takeoffWS = sheets[2]

  var dataRange = pricingWS.getRange(1,4,45,1).getValues()  

  var dataArray = []

  debugger

  for (var i = 1; i <= dataRange.length; i++)
  {
    if(dataRange[i - 1]<=0|| /^[a-zA-Z]+$/.test(dataRange[i - 1])){
      continue
    }
    else{ 
      dataArray.push(pricingWS.getRange("A7").getValue())
      dataArray.push(pricingWS.getRange(i, 1).getValue())
      dataArray.push(pricingWS.getRange(i, 2).getValue())
      dataArray.push(pricingWS.getRange(i, 4).getValue())
      dataArray.push(pricingWS.getRange("A8").getValue())
      takeoffWS.appendRow(dataArray)
      dataArray = []
    }   
    
  }
  
}

为了添加更多上下文,这是我从中获取值的表: sheet

这是结果表: Result

我不确定这段代码是否是最好的方法。我正在谷歌上搜索所有内容并逐步对其进行编码。哈哈。

但是,这甚至不是我真正的问题。

我的问题是第一次和最后一次推送,我想找到一种方法来读取我在执行 for 循环时所在的单元格位置,如果它超出我想要的范围,我希望它更改 getRange 值第一次和最后一次推送。

为了更好地解释,在上面的结果表图像中,我的第一列和最后一列重复出现,因为我在推送中对它们进行了硬编码。但我想要的是,当我的 dataRange 的 var i 在 D10:D15 范围内时,我希望它推送 A7 和 A8,当它到达范围 D40:D45 时,我希望它推送 A36 和 A38 等等。

有人可以帮我吗?请?哈哈

提前非常感谢您。

javascript google-apps-script append
1个回答
0
投票

试试这个:

function saveData() {
  const ss = SpreadsheetApp.getActive()
  const shts = ss.getSheets();
  const sh1 = shts[1]
  const sh2 = shts[2]
  var vs1 = sh1.getRange(1, 4, 45, 1).getValues().flat()
  var dA = []
  vs1.forEach((e, i) => {
    if (!isNaN(e)) {
      dA.push(sh1.getRange("A7").getValue())
      dA.push(sh1.getRange(i + 1, 1).getValue())
      dA.push(sh1.getRange(i + 1, 2).getValue())
      dA.push(sh1.getRange(i + 1, 4).getValue())
      dA.push(sh1.getRange("A8").getValue())
      sh2.getRange(sh2.getLastRow() + 1, 1, 1, dA.length).setValues([dA]);
    }
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.