Search 对于给定范围内的每个单元格,测试是否包含搜索字符串,并返回删除搜索字符串的子字符串

Search 对于给定范围内的每个单元格,测试是否包含搜索字符串,并返回删除搜索字符串的子字符串,search,replace,foreach,google-apps-script,google-sheets,Search,Replace,Foreach,Google Apps Script,Google Sheets,我有一个谷歌电子表格,其中的值在单元格内标记,但列与列之间不一致 我需要搜索一个单元格区域(特别是当前行),以找到一个包含关键字的单元格,并获取关键字后面的值 示例数据: 参数,参数2,参数3 foo:1,bah:31,身高:6 价格:9,帮助:62, 高度:9,插槽:4,价格:6 示例结果: 参数,参数2,参数3,价格 foo:1,bah:31,身高:6,价格:9,帮助:62, 高度:9,插槽:4,价格:6,6 函数extractValueFromRange(匹配字符串,myRange){ /

我有一个谷歌电子表格,其中的值在单元格内标记,但列与列之间不一致

我需要搜索一个单元格区域(特别是当前行),以找到一个包含关键字的单元格,并获取关键字后面的值

示例数据:

参数,参数2,参数3
foo:1,bah:31,身高:6
价格:9,帮助:62,
高度:9,插槽:4,价格:6

示例结果:

参数,参数2,参数3,价格
foo:1,bah:31,身高:6,
价格:9,帮助:62,
高度:9,插槽:4,价格:6,6

函数extractValueFromRange(匹配字符串,myRange){
//将电池置于测试范围内
var elements=myRange。
//通过细胞循环
//如果可能的话,更愿意使用foreach
对于(var i=0;i-1){
//拿出火柴串
var myResult=SUBSTITUTE(元素,匹配字符串,“”,1);
//返回结果
返回我的结果;
}
//如果没有找到匹配项,则不返回任何内容
返回null;
}

我认为您可以直接在电子表格中通过公式进行管理

下面是如何在“:”之后提取值,但在“,”

文本|结果|公式

Param,Param2,Param3,price |#REF!|=指数(拆分(regextract(A2;“价格:[0-9]*”;“:”;2)

foo:1,bah:31,高度:6 |#REF!|=指数(拆分(REGEXEXTRACT(A3;“价格:[0-9]*”);“:”;2)

价格:93,帮助:62,| 93 |=指数(拆分(REGEXEXTRACT(A4;“价格:[0-9]*”);“:”;2)

高度:9,槽位:4,价格:6 | 6 |=指数(拆分(REGEXEXTRACT(A5;“价格:[0-9]*”;:”;2)

=REGEXEXTRACT(join(;”,A1:EJ1),“价格:(\d+))

您可以使用分隔符或您的选择连接所有值,在示例中使用分号


正则表达式本身只提取单词price和分号之间的值,并指定它可以是任意长度的1个或多个字符。

知道这一点很有帮助,但我必须在更宽的范围内使用…例如G1:EJ1我不想连接那么多单元格我想在主工作表上使用它的列范围(a:EJ)这就是为什么我希望使用脚本而不是在工作表函数中。
function extractValueFromRange(MatchString,myRange) {
  // Get the cells in range to be tested 
  var elements = myRange.

  // Loop through the cells
  // Prefer to use foreach... if possible 
  for (var i = 0; i < elements.length; i++) {

    // Get cell string to be tested
    var element = elements[i-1];

    // Test if the MatchString is found
    if(element.indexOf(SearcchString)>-1){

      // Take out the MatchString
      var myResult = SUBSTITUTE(element,MatchString,"",1);
      // Return the result
      return myResult;
    }

    // if no match found return nothing
    return null; 
  }