当前位置: 首页 > 知识库问答 >
问题:

如何在数组公式中使用自定义函数ARRAYREPLACE()?[谷歌网页]

焦苏燕
2023-03-14

我使用Thiago Mata的自定义Google Sheets函数来搜索和替换字符串中的多个单词。

Thiago的函数可以在这里找到

实际上,我使用他的函数替换关键字与相应的超链接。

原始字符串存储在列示例!A: A.关键字替换html对存储在另外三个表中:垂直表、水平表和技术表。

例如,在原始字符串中找到的每个“Authors”实例都替换为

    <a target="_blank" href="https://www.flauntmydesign.com/authors" title="Click for more business examples targeting authors">Authors</a>

这是一张谷歌表格,显示了我正在尝试做的事情(在原始数据/公式之外可编辑)

当我将该函数应用于单个单元格时,此关键字替换非常有效。当我手动将公式向下拖动列时,它也非常有效。

问题是,我如何转换专栏示例!B:B转换成工作数组公式?

共有1个答案

颜云瀚
2023-03-14

只需修改ARRAYREPLACE,使其接收一系列单元格,而不是单个单元格。然后,遍历数组(例如,使用map),并对每一行使用与上一个函数对应的代码:

function ARRAYREPLACE(dataInput,fromList,toList){
  return dataInput.map(row => {
    const input = row[0];
    // ... YOUR PREVIOUS FUNCTION
    return result;
  })
}

然后,在B2中,将输入范围设置为A2,而不是设置为A2:A10

 
function ARRAYREPLACE(dataInput,fromList,toList,caseSensitive){
  /* solution from Iamblichus */
return dataInput.map(row => {
const input = row[0];
  
  /* default behavior it is not case sensitive */
  if( caseSensitive == undefined ){
caseSensitive = false;
  }
  /* if the from list it is not a list, become a list */
  if( typeof fromList != "object" ) {
fromList = [ fromList ];
  }
  /* if the to list it is not a list, become a list */
  if( typeof toList != "object" ) {
toList = [ toList ];
  }
  /* force the input be a string */
  var result = input.toString();

  /* iterates using the max size */
  var bigger  = Math.max( fromList.length, toList.length) ;

  /* defines the words separators */
  var arrWordSeparator = [ ".", ",", ";", ":", " " ];

  /* interate into the lists */
  for(var i = 0; i < bigger; i++ ) {
/* get the word that should be replaced */
var fromValue = fromList[ ( i % ( fromList.length ) ) ]
/* get the new word that should replace */
var toValue = toList[ ( i % ( toList.length ) ) ]

/* do not replace undefined */
if ( fromValue == undefined ) {
  continue;
}
if ( toValue == undefined ) {
  toValue = "";
}

/* apply case sensitive rule */
var caseRule = "g";
if( !caseSensitive ) {
  /* make the regex case insensitive */
  caseRule = "gi";
}

/* for each end word char, make the replacement and update the result */
for ( var j = 0; j < arrWordSeparator.length; j++ ) {

  /* from value being the first word of the string */
  result =  result.replace( new RegExp( "^(" + preg_quote( fromValue + arrWordSeparator[ j ] ) + ")" , caseRule ), toValue + arrWordSeparator[ j ] );

  /* from value being the last word of the string */
  result =  result.replace( new RegExp( "(" + preg_quote( arrWordSeparator[ j ] + fromValue ) + ")$" , caseRule ), arrWordSeparator[ j ] + toValue );

  /* from value in the middle of the string between two word separators */
  for ( var k = 0; k < arrWordSeparator.length; k++ ) {
    result =  result.replace( 
      new RegExp( 
        "(" + preg_quote( arrWordSeparator[ j ] + fromValue + arrWordSeparator[ k ] ) + ")" , 
        caseRule 
      ), 
      /* need to keep the same word separators */
      arrWordSeparator[ j ] + toValue + arrWordSeparator[ k ] 
    );
  }
}

/* from value it is the only thing in the string */
result =  result.replace( new RegExp( "^(" + preg_quote( fromValue ) + ")$" , caseRule ), toValue );
  }
  /* return the new result */
  return result;
  })
}
 
 
 
 类似资料:
  • 我希望有人能帮我调整(甚至替代)我在谷歌表单中使用的一个公式,根据谷歌表单输入的信息自动填充列。 简单地说,我使用索引函数来匹配从谷歌表格中的下拉菜单中选择的名称,并到达谷歌表格的E列,在“表格2”的A列中收到与相同名称列表的响应。索引公式从表2中获取与该名称相关的信息(例如:注册号、电子邮件地址),并将其放在“表格回复1”表中,与谷歌表格的输入一起(当然包括出现在E栏中的名称)。 我一直在使用(

  • 我试图将一个基本的Countif函数转换为ArrayFunction,它是 但此函数对 范围中的每个“是”进行计数。 如何使它逐行计数,仍然是一个数组公式? 这意味着具有此功能的单元格从 C2:BE2 计数,下一个单元格从 C3:BE3 计数 另外,我不能使用符号功能,因为它只有在标准中有数字时才有效,而这个论坛中的其他帖子都有。

  • 我是Spring Jpa和Hibernate的新手。我试图使用一个定制函数从Oracle数据库中获取数据。我可以定义一个实体及其相关的服务、实现和存储库。此外,我通过使用< code>registerFunction创建了一个新的定制Oracle方言,如下所示。 所以我有两个问题: 1)在我的Oracle数据库中,函数位于不同的模式下。我需要指定它的模式吗?如果是的话怎么做?还是hibernate

  • 我正在尝试使用脚本中的自定义js函数作为GoogleSheets中过滤单元函数的条件。 示例: 返回/(一个值或数组,基于范围大小)。 自定义函数单独工作得很好,比如填充该列。但是在上面的中,我总是有这个错误: 我尝试用谷歌搜索这个问题,但只得到了基于内置谷歌表格功能的解决方案。此外,我试图将此函数与筛选器和条件格式“自定义公式”字段集成,但没有成功。 自定义函数代码: 返回所提供单元格或区域的背

  • 问题内容: 我正在尝试预取训练数据以隐藏I / O延迟。我想编写自定义Python代码,该代码从磁盘加载数据并对数据进行预处理(例如,通过添加上下文窗口)。换句话说,一个线程进行数据预处理,另一个线程进行训练。TensorFlow有可能吗? 更新:我有一个基于@mrry的示例的工作示例。 问题答案: 这是一个常见的用例,大多数实现都使用TensorFlow的 队列 将预处理代码与训练代码分离。有一

  • 主要内容:操作整个数据表,操作行或列,操作单一元素如果想要应用自定义的函数,或者把其他库中的函数应用到 Pandas 对象中,有以下三种方法: 1) 操作整个 DataFrame 的函数:pipe() 2) 操作行或者列的函数:apply() 3) 操作单一元素的函数:applymap() 如何从上述函数中选择适合的函数,这取决于函数的操作对象。下面介绍了三种方法的使用。 操作整个数据表 通过给 pipe() 函数传递一个自定义函数和适当数量的参