关于比较两列值和相邻列与另一个工作表的设定值的问题



我试图比较2个不同列的值,以确保它们存在(在表1上)一旦脚本意识到它们存在,我需要访问sheet1的数量列,并将该值添加到sheet2的数量列。问题是我不确定如何获得foreach循环的位置/索引,并在不将值设置为整个列的情况下将setValue偏移到另一列(如果列a的产品名不存在于Sheet1中,我不想这样做)

下面是我如何尝试这样做的代码示例

我已经将它包含在粘贴bin中,因为我不知道如何格式化粘贴的代码(对不起,我是这个超级新!)

<https://pastebin.com/EKB2n9kA>

Sheet1传入数据https://drive.google.com/file/d/1eLNeOZZbdeCDfMMImksVRnBXwKxpHIO_/view?usp=sharing

Sheet2 'base'数据添加数量值到https://drive.google.com/file/d/1h26H9eQgZapd2Y0LVamhRPYme-8LmVF0/view?usp=sharing

期望/想要的结果示例https://drive.google.com/file/d/1-0ozD5PrbIq-otG4j7kAyLufQFjDR5Hi/view?usp=sharing

我还附上了3张不同的参考照片

表1是要读取的"传入"数据表2是我们的"基础"数据,需要将Sheet1的数量列添加到其中第三个屏幕截图是预期的结果(让脚本跳过不包含匹配数据的行,但仍然能够根据找到值的索引/位置获得数量值)

任何关于如何实现这一目标的见解将是真诚的感谢

我试着把结果推到一个空数组,但它似乎没有给我做它的方式很多有用的信息。

我也试过只是得到一个偏移范围(gerange ("G2:G").offset(0,3). setvalues()来设置结果,但它设置了整个列的值,而不是只在每个列的值相匹配的地方进行比较。

从您的<https://pastebin.com/EKB2n9kA>来看,似乎您当前的脚本如下。

function compareCol() {
var ss = SpreadsheetApp.getActiveSpreadSheet();
var s1 = ss.getSheetByName("Sheet1");
var s2 = ss.getSheetByName("Sheet2");
var datA = s1.getRange("A2:A").getValues();
var datB = s2.getRange("A2:A").getValues();
var quantityA = s1.getRange("C2:C").getValues();
var quantityB = s2.getRange("D2:D");
let matchingCol = [];
for (var i in datA) {
for (var x in datB[i]) {
if (datA[i][0] === datB[x][0]) {
}
}
}
}

修改点:

  • 在您的脚本中,循环中的if语句没有脚本。quantityAquantityBmatchingCol不使用

当您修改脚本以实现您的目标时,如何进行以下修改?

修改脚本:

function compareCol() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s1 = ss.getSheetByName("Sheet1");
var s2 = ss.getSheetByName("Sheet2");
var datA = s1.getRange("A2:C" + s1.getLastRow()).getValues().reduce((o, [a, , c]) => (o[a] = c, o), {});
var datB = s2.getRange("A2:D" + s2.getLastRow()).getValues();
var matchingCol = datB.map(([a, , , d]) => [datA[a] || d]);
s2.getRange(2, 4, matchingCol.length).setValues(matchingCol);
}
  • 在本次修改中,当列"A"在"Sheet2"未从列";a &;"中找到。在"Sheet1"中,列"D"的值";Sheet2"使用。如果您想删除此内容,请按如下方式修改。

    • var matchingCol = datB.map(([a, , , d]) => [datA[a] || d]);
      
    • var matchingCol = datB.map(([a]) => [datA[a] || null]);
      

引用:

  • reduce ()
  • map ()

希望这对你有帮助

function comparingColumns() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
const osh = ss.getSheetByName("Sheet1");
const [h,...vs] = sh.getDataRange().getValues();
vs.forEach((r, i) => {
//comparing column A to Column D
if (r[0] == r[3]) {
//getting column G of same row in sheet1
osh.getRange(i + 2, 7).setValue(r[6]);
}
})
}

相关内容

最新更新