从2个范围中查找匹配项并将匹配项替换为特定值,是否有优化的方法?

rEsonansDx

这是样本表。由此

1    Search area       Bounty list  Bullet      
2      a    i   z       a   b   c   abc
3      e    b   d       d   e   f   def
4      y    f   h       g   h   i   ghi
5                               
6      1    2   3   4   5   6   7   8
7                Column #

对此

1    Search area          Bounty list   Bullet      
2      abc  ghi z         a   b   c     abc
3      def  abc def       d   e   f     def
4      y    def ghi       g   h   i     ghi
5                               
6       1    2   3   4    5   6   7      8
7                Column #

将从(2,5)或“ a”开始的“赏金列表”中取一个值“赏金”,从a,i,z,e,b,d, y,f,h。然后,如果找到一个或多个等于“赏金”值的单元格,则会将当前“赏金”行中第8列的“子弹”值放置到这些单元格中。该过程将按“赏金列表”中的a,b,c,d,e,f,g,h,i的顺序重复。这两个过程都向左和向下移动。

function menuItem1()
{
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var target = sheet.getDataRange().getValues();  

  for (var BountyRow = 2; BountyRow<target.length; BountyRow++)//switching rows in bounty list//
  {
    var bullet = sheet.getRange(BountyRow, 8).getValue(); //cell value to paste on targets// 
    for (var BountyColumn = 5; BountyColumn<8; BountyColumn++) //switching columns in bounty list//
    {
    var bounty = sheet.getRange(BountyRow, BountyColumn).getValue();  // cell value to search for//
    if (bounty !=0)
      {
        for (var SearchRow = 1; SearchRow<target.length; SearchRow++) //switching row on search area//
        {
          for(var SearchColumn = 0; SearchColumn<4;SearchColumn++)//switching column on search area//
          {

            if(target[SearchRow][SearchColumn] == bounty) //if search target is found//
            {
              var found = target[SearchRow][SearchColumn];
              sheet.getRange(SearchRow+1, SearchColumn+1).setValue(bullet);
              Logger.log((found)+ " in "+"row"+(SearchRow+1)+", column"+(SearchColumn+1));
            }
          }
        }
      }
    }
  }
}

它涉及成千上万次始终使用一分钟以上的搜索,我想知道是否有更有效的方法?

日加诺奇卡

为了优化您的代码,您需要做两件事:

  1. 而不是为每个单元格使用getValue()setValue()(这会使您的代码运行缓慢)

    • 检索所有赏金列表,并搜索一次数据, getValues()
    • 将值分配给数组
    • 替换数组中的匹配项
    • 将更新的数组值设置回范围 setValues()
  2. 利用indexOf()map()查找匹配项并更有效地替换它们

样品:

function menuItem1(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow=sheet.getLastRow();
  var searchValues=sheet.getRange(2,1,lastRow-2+1,3).getValues();
  var bountyValues=sheet.getRange(2,5,lastRow-2+1,3).getValues();
  var bulletValues=sheet.getRange(2,8,lastRow-2+1,1).getValues();
  for (var i = 0; i<bountyValues.length; i++){
    for (var j = 0; j<bountyValues[0].length; j++){
      if (bountyValues[i][j] !=0){        
        replaceValues(searchValues, bountyValues[i][j], bulletValues[i][0]);
      }
    }
  }
  sheet.getRange(2,1,lastRow-2+1,3).setValues(searchValues)
}
function replaceValues(search, bounty, bullet) {
  for(var k=0;k<search.length;k++){
    search[k]=search[k].map(function(search) {
      var regex=new RegExp("\\b"+bounty+"\\b","g");
      return search.toString().replace(regex, bullet);
    });
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何计算字典值中的标记并将每个匹配项替换为列表中的项

来自分类Dev

将数据框内容与字符匹配,并将匹配项替换为特定字词(R中)

来自分类Dev

将列中的值替换为与具有匹配项的vector对应的值

来自分类Dev

将字符串中的所有匹配项替换为哈希表中的值

来自分类Dev

将字符串中的所有匹配项替换为哈希表中的值

来自分类Dev

lodash中是否有功能替换匹配项

来自分类Dev

awk在2个文件中查找不匹配项

来自分类Dev

搜索匹配项,然后将该匹配项后的值替换为前一行中的值

来自分类Dev

搜索数组以查找值匹配项并替换值-php

来自分类Dev

JAVA:如何在嵌套的JSONString中查找子字符串的所有匹配项并替换为某些文本

来自分类Dev

MS Excel:指示2列中是否有匹配项

来自分类Dev

根据匹配条件从 5 个列表中查找匹配项

来自分类Dev

在Visual Studio中查找并替换而不是替换所有匹配项

来自分类Dev

如果存在其他2个表中的匹配项,则获取所有表值

来自分类Dev

轻松查找和替换嵌套列表中的每个匹配项

来自分类Dev

在R中,根据相邻列中字符的匹配项将值替换为NA

来自分类Dev

在perl中,有什么比用换行符替换最后一个匹配项更有效的方法?

来自分类Dev

在数组中搜索值匹配项并替换值-php

来自分类Dev

如何使用preg replace在PHP中查找并替换所有匹配项_meta:1 :?

来自分类Dev

查找所有在特定模式之前和之后的匹配项

来自分类Dev

在一个特定字符后查找所有匹配项

来自分类Dev

从两个文件中的特定列中查找匹配项

来自分类Dev

查找匹配项Tindr样式-可以批准或拒绝匹配项的2个用户配对

来自分类Dev

查找所有匹配项并复制侧列的值<>“”

来自分类Dev

正则表达式将匹配项中的所有匹配项替换x次

来自分类Dev

用散列值替换文件中的匹配项

来自分类Dev

查找,如果表1中没有匹配项,则查找表2

来自分类Dev

使用第一行作为参考替换所有行中的特定字符匹配项

来自分类Dev

Python,RegEx,替换匹配项的特定部分

Related 相关文章

  1. 1

    如何计算字典值中的标记并将每个匹配项替换为列表中的项

  2. 2

    将数据框内容与字符匹配,并将匹配项替换为特定字词(R中)

  3. 3

    将列中的值替换为与具有匹配项的vector对应的值

  4. 4

    将字符串中的所有匹配项替换为哈希表中的值

  5. 5

    将字符串中的所有匹配项替换为哈希表中的值

  6. 6

    lodash中是否有功能替换匹配项

  7. 7

    awk在2个文件中查找不匹配项

  8. 8

    搜索匹配项,然后将该匹配项后的值替换为前一行中的值

  9. 9

    搜索数组以查找值匹配项并替换值-php

  10. 10

    JAVA:如何在嵌套的JSONString中查找子字符串的所有匹配项并替换为某些文本

  11. 11

    MS Excel:指示2列中是否有匹配项

  12. 12

    根据匹配条件从 5 个列表中查找匹配项

  13. 13

    在Visual Studio中查找并替换而不是替换所有匹配项

  14. 14

    如果存在其他2个表中的匹配项,则获取所有表值

  15. 15

    轻松查找和替换嵌套列表中的每个匹配项

  16. 16

    在R中,根据相邻列中字符的匹配项将值替换为NA

  17. 17

    在perl中,有什么比用换行符替换最后一个匹配项更有效的方法?

  18. 18

    在数组中搜索值匹配项并替换值-php

  19. 19

    如何使用preg replace在PHP中查找并替换所有匹配项_meta:1 :?

  20. 20

    查找所有在特定模式之前和之后的匹配项

  21. 21

    在一个特定字符后查找所有匹配项

  22. 22

    从两个文件中的特定列中查找匹配项

  23. 23

    查找匹配项Tindr样式-可以批准或拒绝匹配项的2个用户配对

  24. 24

    查找所有匹配项并复制侧列的值<>“”

  25. 25

    正则表达式将匹配项中的所有匹配项替换x次

  26. 26

    用散列值替换文件中的匹配项

  27. 27

    查找,如果表1中没有匹配项,则查找表2

  28. 28

    使用第一行作为参考替换所有行中的特定字符匹配项

  29. 29

    Python,RegEx,替换匹配项的特定部分

热门标签

归档