如果另一个单元格的第一个单词=一个单元格,则将单元格更改为最后一个单词

时间:2016-02-18 23:51:15

标签: regex google-sheets

最奇怪的问题......我理解。

基本上有一个事件日志,上面写着“Johno已将他的名字改为Johna”(例)

我想要一个脚本,它将更改位于A列中的'Johno':A到Johna(基于最后一个单词)

2 个答案:

答案 0 :(得分:0)

您需要使用regular expression

要匹配第一个单词,语法为^\w*,因此=regexextract("hello world","^\w*")会给你"你好"

要匹配最后一个单词,语法为\w*\z\w*$,因此=regexextract("hello world","\w*$")会为您提供" world"

要用第一个单词替换最后一个单词,我测试了以下

=regexreplace(
   "hello brave new world",
   "\w*$",
   regexextract("hello brave new world", "^\w*")
 )

不幸的是,它给了我"你好勇敢的新hellohello"。它看起来像一个bug(我在Javascript中测试了类似的代码并得到了#34;你好勇敢的新问候"正如预期的那样)。

所以解决方法就像

=REGEXREPLACE(A1 &".","(\w*[.])",REGEXEXTRACT(A1,"^\w*"))

首先添加"。"到字符串的结尾,并搜索任何单词后跟"。"代替。

答案 1 :(得分:0)

试试这个:

function onEdit(e)
{
  var sheet = SpreadsheetApp.getActiveSheet();
  var editRange = sheet.getActiveRange();
  var editRow = editRange.getRow();
  var editCol = editRange.getColumn();
  var lr = sheet.getLastRow()
  var range = sheet.getRange("B:B");//only run when column B is changed
  var rangeRowStart = range.getRow();
  var rangeRowEnd = rangeRowStart + range.getHeight()-1;
  var rangeColStart = range.getColumn();
  var rangeColEnd = rangeColStart + range.getWidth()-1;
  if (editRow >= rangeRowStart && editRow <= rangeRowEnd 
      && editCol >= rangeColStart && editCol <= rangeColEnd)
  {
  var range = e.range;
  var val=e.range.getValue()//get sentence
  var name=val.split(" ").slice(-1)//get the last word
  var row = sheet.getActiveCell().getRowIndex();//get changed row number
  sheet.getRange(row,1 ).setValue(name);//set the name in column A
  }}