大家好,我需要帮忙处理我的代码。
我想做的是从一张纸中获取值并附加到另一张纸上,但我只会在仅查找特定列范围内的数字的条件下附加值,如果找到,我将在其周围附加值,如下所示:
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 = []
}
}
}
我不确定这段代码是否是最好的方法。我正在谷歌上搜索所有内容并逐步对其进行编码。哈哈。
但是,这甚至不是我真正的问题。
我的问题是第一次和最后一次推送,我想找到一种方法来读取我在执行 for 循环时所在的单元格位置,如果它超出我想要的范围,我希望它更改 getRange 值第一次和最后一次推送。
为了更好地解释,在上面的结果表图像中,我的第一列和最后一列重复出现,因为我在推送中对它们进行了硬编码。但我想要的是,当我的 dataRange 的 var i 在 D10:D15 范围内时,我希望它推送 A7 和 A8,当它到达范围 D40:D45 时,我希望它推送 A36 和 A38 等等。
有人可以帮我吗?请?哈哈
提前非常感谢您。
试试这个:
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]);
}
});
}