Google apps script 如何在Google工作表上为每一行包含特定字符的行循环转置函数?

Google apps script 如何在Google工作表上为每一行包含特定字符的行循环转置函数?,google-apps-script,google-sheets,excel-formula,spreadsheet,Google Apps Script,Google Sheets,Excel Formula,Spreadsheet,这就是我所拥有的(每个“|”符号表示同一行上的新列) 然而,我正试图让它看起来像谷歌表单上的下面: John Doe | Manager | [empty] | NY | 123-45-67 | Fax: 987-54-32 | a@b Jane | Assistant | [empty] | CA | 234-56-78 | [empty] | c@d Mike Brown | Analyst | Intern | CA | 345-67-89 | [empty] | e@f 所有的名字都以

这就是我所拥有的(每个“|”符号表示同一行上的新列)

然而,我正试图让它看起来像谷歌表单上的下面:

John Doe | Manager | [empty] | NY | 123-45-67 | Fax: 987-54-32 | a@b
Jane | Assistant | [empty] | CA | 234-56-78 | [empty] | c@d
Mike Brown | Analyst | Intern | CA | 345-67-89 | [empty] | e@f
所有的名字都以粗体字体格式化,因此我可以使用该属性作为标识符,以便能够将姓氏和名字合并到同一列中。但是,我不知道如果一条记录中存在传真号码,而另一条记录中不存在传真号码,我怎么能将一列留空


我最终希望它能够在每个包含“@”字符的单元格之后创建一个新的记录行。这其中有多少是可能的?如果可以完成,有多少可以完成,以及如何在Google Sheets中完成?

这需要一些工作,但这可以通过使用工作表中的内置函数而不用脚本完成。我会在评论中添加一个链接到下面的一个例子,但我不能保证永远保留它。但方法是这样的

第0步:在第1行中添加适当的标题以保持健全。为记录定位器保留列A,稍后生成。因此,在上面的示例中,“John”位于B2中,“Doe”位于C2中

步骤1:为每种类型的字段构建一列,并指示值是否为该类型。例如,我的D列确定某物是否是一封公式为(draggable)的电子邮件
=iferror(find(“@”,B2)>0,false)
。在E列中,我确定某物是否是名称。您可以使用大胆的想法,但我选择了
=或((row()=2),D1)
,这表示我是第一行数据,或者前一行是电子邮件。这也会被拖走。类似于测试状态:
=和((LEN(B2)=2),(B2=上限(B2))
,fax
=(上限(mid(B2,1,3))=“fax”)
,ID
=和((LEN(B2)=9),mid(B2,4,1)=“-”,mid(B2,7,1)=“-”)以及最后任何其他内容都必须是作业
=不是(或(D2,E2,F2,G2,H2))

步骤2:从2个潜在列构造值。如果第二个是空的,就第一个。否则名称之间会有一个空格,其他名称之间会有“and”<代码>=if(是空白的(C2),B2,if(E2,B2&“”&C2,B2&”和“&C2))

第3步:根据真实情况构建记录类型。我将类型名称放在标题行中,以便稍后匹配,这使得这个公式有点难以理解,但我希望您能理解:
=if(D2,$S$1,if(E2,$N$1,if(F2,$P$1,if(G2,$R$1,if(H2,$Q$1,if(I2,$O$1,“error”;)
)。现在在A2中,我将记录编号附加到作业类型中,其中记录编号是我们迄今为止遇到的姓名数量,因此(也可以拖动)
=K2&countif($E$2:$E2,true)
。[以这种方式构建密钥的想法来自

第4步:为了整洁,我将L列留空,以便结果与输入和计算分开,然后我在M列中输入一个记录编号,如下所示
=(row()-1)
。现在我们在行的其余部分应用vlookup,通过将每个字段与所需输出(name | job | state | ID | fax | email)的列标题相匹配来获得每个字段如下所示
=vlookup(N$1和$M2,$A:$K,10,false)
,它可以拖动到最右边的一列(email)和最下面的一行(在我们的示例中,记录3的第4行)。缺少的数据显示为#N/A(如果你觉得很难看,一个IfError可以让它说得更好)


我希望这不仅说明了一个结果,也说明了一种方法,如果你认为合适的话,你可以用它来修补。

为什么你希望分析师和实习生在不同的专栏?那么你的州不会都排在同一个专栏?所有这些都可以通过应用程序脚本实现。非常感谢。很高兴知道这一点。这个脚本对谷歌来说会是什么样子工作表?我可能需要为某些行创建空字段,以便电话号码在同一个cloumn中对齐,等等。它看起来像JavaScript,因为应用程序脚本就是这样使用的。如果这只是一次性的,而不是定期运行的,我可能只会使用复制粘贴转置,然后对工作表进行排序,以便d根据需要插入单元格以对齐行内容。否则,您将需要编写一些奇特的逻辑来让脚本识别每个单元格中的内容。正如所承诺的,下面是指向示例数据的链接,按照上述方式执行
John Doe | Manager | [empty] | NY | 123-45-67 | Fax: 987-54-32 | a@b
Jane | Assistant | [empty] | CA | 234-56-78 | [empty] | c@d
Mike Brown | Analyst | Intern | CA | 345-67-89 | [empty] | e@f