【问题标题】:Automatic Search and Replace in Google Sheets with a script使用脚本在 Google 表格中自动搜索和替换
【发布时间】:2020-03-01 23:42:25
【问题描述】:

我通常不使用脚本,但我对公式相当有信心:

我有一组单元格中的学生姓名列表。 例如:

在单元格 AF1 中,它说: 汤米琼斯 玛塔·刘易斯 詹姆斯,杰西卡 詹妮弗安妮丝 骨头,雷蒙德

在单元格 AF2 中,它说:
杰西卡·詹姆斯 骨头,雷蒙德 刘易斯,玛塔 戴维森,乔安娜 菲尔德,詹妮弗

该列中超过 150 个单元格以此类推。

所有受影响的单元格都在 AF 列中(它们是从串联列表创建的 - 因此它们是不同公式的结果)。

我需要确保它们都是姓氏,名字。

我一直在尝试从其他人的脚本中复制/粘贴似乎有用的脚本,但我感到沮丧并删除了所有脚本:

我试图创建一个包含以下内容的长脚本:

var to_replace = "乔纳森·阿德金斯"; var replace_with = "阿德金斯,乔纳森";

var to_replace = "约书亚阿德金斯"; var replace_with = "阿德金斯,约书亚"; (所有 400 个名字)

其中包括:
replaceinsheet(表,'乔纳森阿德金斯','阿德金斯,乔纳森'); replaceinsheet(sheet,'Joshua Adkins','Adkins, Joshua'); (所有 400 个名字)

还有一个以这种方式列出它们的: replaceInSheet(values, 'Jonathan Adkins', 'Adkins, Jonathan');

并且我尝试在具有名称并使用以下公式的连接列旁边创建其他列: 创建一个脚本来定义 =arrayreplace 然后使用这个公式。 =arrayreplace(AF1,AI2:AI,AJ2:AJ)

我被困住了。有人可以帮忙吗?

我创建了一个示例表,希望能展示我在说什么:
https://docs.google.com/spreadsheets/d/1gyAdIxletLuJzubVkOmgYmlgt5iw0Ezul1kS4uLbBu8/edit?usp=sharing

任何帮助将不胜感激

【问题讨论】:

  • 内置的 find/replace 需要我做 380 多次,如果我以后再添加,我必须再做一遍。我很想用公式来做,但是当文本不是整个单元格时,我不知道如何合并所有 380 种可能的更改。 .
  • 姓和名有什么区别?我曾经给一位名叫乔治乔治的女士送报纸。
  • @Eliza 解释了你会怎么做

标签: google-apps-script text google-sheets find-replace


【解决方案1】:

内置查找和替换:

  • 选择要更改的范围:Sheet1!A1:L10
  • 编辑>查找和替换
  • 查找:

    (\w+),?\s+([A-z]+)
    
  • 替换:

    $2, $1
    
  • 复选标记:使用正则表达式

  • 点击全部替换

公式:

或者,您可以使用,

=ARRAYFORMULA(REGEXREPLACE(L2:L10,"(\w+),?\s+(\w+)","$2, $1"))

说明:

  • \w:一封信(\word)
  • ,:文字,
  • \s:一个space
  • +: 一个或多个之前匹配的字符
  • ?:前一个匹配字符的一个或零个
  • ():捕获组
  • $:替换编号的捕获组

【讨论】:

  • @Eliza 谢谢!但是,无论名称是否错误,这似乎都会切换名称。有些名字已经是 Last、First,有些是 First Last。我需要将那些 First Last 变成 Last, First。另外,我被一张在一个单元格中包含多个名称的工作表作为列表卡住了。结束列表也必须采用该格式。当学生有另一个名字时,我也希望使用相同的脚本/公式来处理:Michael Bacon --> Mike Bacon --> Bacon, Mike(尽管我可以通过多个步骤来做到这一点)。非常感谢你为我做这件事!
  • @Eliza 似乎会切换名称,无论它们是否错误。有些名字已经是 Last、First,有些是 First Last。 有什么区别?逗号?计算机如何知道哪些名字已经在 Last, First 中? 首先。另外,我被一张在一个单元格中包含多个名称的工作表作为列表卡住了。结束列表也必须采用该格式。 ye 公式和内置 fr 都不会更改格式。
  • 是的,区别在于逗号。在一个单元格中,我们有:杰西卡詹姆斯琼斯,汤米杰西卡是给定的名字。詹姆斯是姓氏。汤米是给定的名字。琼斯是姓氏。我需要那个牢房说:詹姆斯,杰西卡琼斯,汤米即使在另一个牢房里,它已经是正确的。
  • 太棒了!但是,这似乎只修复了每个单元格中的第一次出现 - 有没有办法确保它在每个单元格中都出现?
  • @Eliza 它为我替换了所有出现的事件。确保禁用所有其他设置,例如在查找替换中匹配整个单元格。
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
相关资源
最近更新 更多