Google Apps 脚本:自定义函数,仅根据条件连接多行中的首字母

Posted

技术标签:

【中文标题】Google Apps 脚本:自定义函数,仅根据条件连接多行中的首字母【英文标题】:Google Appscript: Custom function to concatenate only the initials from multiple rows based on a criteria 【发布时间】:2015-05-05 07:49:43 【问题描述】:

抱歉,如果我不能很好地解释它,但我有一个电子表格,我想用它来根据命名约定标准创建用户名(例如,类型 1 = 名字的第一个和第二个首字母 + 中间名首字母 + 姓氏) .

我设法通过下面类似的方法实现了这一点,但正如您所知,它非常冗长。

我通常是编码和脚本的新手,所以如果有办法为此使用脚本,或者使用 Google 电子表格中的现有功能更短的方法来完成它,那将非常有帮助。

=IF((LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ",""))+(LEN(A2)>1))=1,(IF($F$2="Type 1",(LEFT(A2,1))&B2&C2)),IF((LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ",""))+(LEN(A2)>1))=2,(IF($F$2="Type 1",(LEFT(A2,1)&MID(A2,FIND(" ",A2)+1,1)&B2&C2))),IF((LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ",""))+(LEN(A2)>1))=3,(IF($F$2="Type 1",(LEFT(A2,1)&MID(A2,FIND(" ",A2)+1,1)&MID(A2,FIND(" ",A2,FIND(" ",A2)+1)+1,1)&B2&C2))),IF((LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ",""))+(LEN(A2)>1))=4,(IF($F$2="Type 1",(LEFT(A2,1)&MID(A2,FIND(" ",A2)+1,1)&MID(A2,FIND(" ",A2,FIND(" ",A2)+1)+1,1)&MID(A2,FIND(" ",A2,FIND(" ",A2,FIND(" ",A2)+1)+1)+1,1)&B2&C2))),IF((LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ",""))+(LEN(A2)>1))=5,(IF($F$2="Type 1",(LEFT(A2,1)&MID(A2,FIND(" ",A2)+1,1)&MID(A2,FIND(" ",A2,FIND(" ",A2)+1)+1,1)&MID(A2,FIND(" ",A2,FIND(" ",A2,FIND(" ",A2)+1)+1)+1,1)&MID(A2,FIND(" ",A2,FIND(" ",A2,FIND(" ",A2,FIND(" ",A2)+1)+1)+1)+1,1)&B2&C2))))))))

地点:

A2 = 名字,B2 = 中间名缩写,C2 = 姓氏,$F$2 = 命名约定标准“类型 1”

我在那里添加了第一个参数来计算 A2 上的字数 - 如果 A2 中的字数有差异,由于 FIND 函数无法工作,我不断收到错误。

如果我问错了社区,请指出正确的方向。任何帮助将不胜感激。

【问题讨论】:

你可以用脚本做你想做的事。如果您不了解 javascript,则至少需要熟悉一些基础知识。但是您将大量精力投入到使用复杂的功能中。 我同意,我认为我已经阅读了 Google 的 Appscript,但对于那些没有真正习惯整个事情的人来说,这有点让人不知所措。感谢您在下面提供的代码,将为其添加 if 参数,看看它是如何进行的 :) 祝您有美好的一天! 【参考方案1】:

以下是一些帮助您入门的基本代码:

function getCellValues() 
  var rangeNotation = "A2:C2";

  var theSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var theSheet = theSpreadSheet.getActiveSheet();

  var theRangeToGet = theSheet.getRange(rangeNotation);
  var theValues = theRangeToGet.getValues(); //Creates a two dimensional array

  var concatenatedValues = "";

  for (var i = 0;i < theValues[0].length; i++) 
    concatenatedValues += theValues[0][i];
  ;

  var rangeToPutValue = theSheet.getRange("B4");
  rangeToPutValue.setValue(concatenatedValues);
;

【讨论】:

以上是关于Google Apps 脚本:自定义函数,仅根据条件连接多行中的首字母的主要内容,如果未能解决你的问题,请参考以下文章

Stacked IFs Google Sheets Apps 脚本

Google 表单 - 使用 Google Apps 脚本在项目中添加自定义按钮“更多信息”

仅通过 Google Apps 脚本值修改 Google 电子表格

Google Apps脚本未检测到当前行

在 Apps 脚本中的自定义函数中,BigQuery 调用失败

Google Apps 脚本 | Switch Case 仅选择默认选项