【问题标题】:Google script: find value then set new valueGoogle 脚本:找到值然后设置新值
【发布时间】:2023-02-22 07:37:02
【问题描述】:

我正在尝试制作简单的功能。有两张纸,一张用于手动输入数据sheetA,第二张是数据库sheetB。姓名单元格始终为B1,姓氏始终为B2,均在sheetA 中。我希望它如何工作:

  1. sheetA搜索值是B9
  2. sheetB中找到匹配行
  3. 从匹配行列中取值12
  4. imie + nazwisko 中的值替换找到的值

    这是代码:

    function Find() {
      const ss = SpreadsheetApp.getActiveSpreadsheet()
      const sheetA = ss.getSheetByName('A')
      const sheetB = ss.getSheetByName('B')
    
      const bData = sheetB.getRange(2,1,sheetA.getLastRow()-1,13).getValues()
    
      const name = sheetA.getRange("B1").getValue() 
      const surname = sheetA.getRange("B2").getValue() 
    
      const searchValue = sheetA.getRange("B9").getValue() 
    
      const matchRow = bData.find( r => r[1] == searchValue)
      const match = matchRow ? matchRow[12] : null 
    
    }
    
    

    我试过

    sheetB.getRange(??).setValue(name + " " + surname)
    

    当我输入像M2这样的精确范围时它工作正常,但是如何将match值放入getRange

    编辑:

    输入和输出sheetA(搜索单元格总是保持不变,在这个例子中是1542

    First name Last name car ID
    Emma Brown 1542

    输入sheetB

    car ID Year Driver
    3421 2019 John Doe
    1542 2021 Tom Meyer
    7652 2014 Victoria Weber

    输出sheetB

    car ID Year Driver
    3421 2019 John Doe
    1542 2021 Emma Brown
    7652 2014 Victoria Weber

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。不幸的是,我无法理解你的问题。为了正确理解你的问题,你能提供你期望的示例输入和输出情况吗?
  • 第 12 列是 r[11]
  • @Tanaike 添加了示例输入和输出,也许现在您会明白我在寻找什么
  • 不,其实我没有
  • 只需查看示例表即可。两张纸,一张用于输入数据,第二张是数据库。在此示例中,搜索值始终为 C1 单元格,

标签: javascript google-apps-script google-sheets


【解决方案1】:

我相信你的目标如下。

  • 您想使用“SheetA”实现您提供的“输入表 B:”。
  • 您想使用 Google Apps 脚本实现此目的。

在这种情况下,下面的示例脚本怎么样?

示例脚本:

function myFunction() {
  const sheetNameA = "SheetA"; // Please set your source sheet name.
  const sheetNameB = "SheetB"; // Please set your destination sheet name.

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetA = ss.getSheetByName(sheetNameA);
  const sheetB = ss.getSheetByName(sheetNameB);
  const obj = new Map(sheetA.getRange("A2:C" + sheetA.getLastRow()).getValues().map(r => [r[2], `${r[0]} ${r[1]}`]));
  const range = sheetB.getRange("A2:C" + sheetB.getLastRow());
  const values = range.getValues().map(r => [obj.get(r[0]) || r[2]]);
  range.offset(0, 2, values.length, 1).setValues(values);
}
  • 当这个脚本运行时,我认为你提供的输出情况是通过你的输入情况得到的。

笔记:

  • 从您添加的示例表中,在此答案中,它假设 First namecar ID 的值分别存在于“SheetA”和“SheetB”的单元格“A1”中。请注意这一点。

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多