Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将一列中的多个数据点转换为多列_Excel_Google Apps Script_Google Sheets_Excel Formula_Google Sheets Formula - Fatal编程技术网

Excel 将一列中的多个数据点转换为多列

Excel 将一列中的多个数据点转换为多列,excel,google-apps-script,google-sheets,excel-formula,google-sheets-formula,Excel,Google Apps Script,Google Sheets,Excel Formula,Google Sheets Formula,我的输入都在一列中。每个数据点包含的信息包括from:、to:、subject:、message:等。我想将这些不同的数据点信息分成几列。我做的第一部分是使用textjoin函数组合一个数据点的所有信息。然后,我使用mid函数将它们分为几列 我的问题出现在两个方面:(1)输入中的主题部分和消息部分可以有几行,但我需要将它们包含在输出中的一个单元格中。(2) 我们有几个数据点,因此,如果有更简单/更快的方法,这也会很有帮助。解决这些问题的最佳方法是什么,或者我可以在处理这些问题时被引导到正确的方向

我的输入都在一列中。每个数据点包含的信息包括from:、to:、subject:、message:等。我想将这些不同的数据点信息分成几列。我做的第一部分是使用textjoin函数组合一个数据点的所有信息。然后,我使用mid函数将它们分为几列

我的问题出现在两个方面:(1)输入中的主题部分和消息部分可以有几行,但我需要将它们包含在输出中的一个单元格中。(2) 我们有几个数据点,因此,如果有更简单/更快的方法,这也会很有帮助。解决这些问题的最佳方法是什么,或者我可以在处理这些问题时被引导到正确的方向。这个问题在Excel/Google工作表中更容易解决吗

编辑:以下是一个可复制的示例:

Edit2:我的2个代码用于生成我想要的结果,但仅用于第一个数据点

=Textjoin(" ", TRUE, A1:A22,)
=MID(B5,SEARCH("FROM: ",B5)+LEN("FROM: "),SEARCH(" TEL#:",B5)-SEARCH("FROM: ",B5)-LEN("FROM: "))
有一件事我忘了提到,每个数据点都以(#)登录开始

例如:第一个数据点以“(1)登录”开头;第二个数据点以“(2)登录”开头。尽管括号内的#不会是从1到n,因为每天#都会重新回到“1”,因为我的输出是结合几个月的数据

编辑3:
主题和消息内容都有可变的行数。它将始终至少有一行,但没有最大行数(这将取决于消息的长度,但我认为平均约为5行)

我有一个不太优雅的解决方案供您选择。我不知道这是否只是为了自动提取一些现有的电子邮件,作为一次性的倡议,或者这是为了用来不断处理传入的电子邮件。但是看看你的样品表

我在A:B中使用了两个helper列。A列通过搜索“(#)LOGIN:”字符串提取每封电子邮件的第一行号

然后,B列对每个电子邮件唯一的所有行进行文本联接。不幸的是,这必须向下拖动,但是如果您用数字填充它旁边的一列(使用序列(999,1),其中999是您想要的行数),那么您可以双击单元格右下角将其填充到底部

以下是B5中的公式:

=IFERROR(ArrayFormula(
    textjoin("~",1,
      indirect(if(A5:A<>"","Input!A"&A5&":A"& if(A6:A>0,(A6:A-1),"")
    )))),"")
这是一个主题:

=IFERROR(ARRAYFORMULA(SUBSTITUTE(REGEXEXTRACT(B5:B,".*~SUBJECT: (.*)~MESSAGE: "),"~"," ")),"")
公式分解: 它查看B列每行上的电子邮件字符串,从B5开始。它搜索以“~SUBJECT:”开头的字符串,然后收集到但不包括“~MESSAGE:”的所有文本。然后使用
SUBSTITUTE
将任何剩余的“~”替换为空格(来自任何多行主题)。它需要
ARRAYFORMULA
自动向下计算B列的所有内容


请注意,可能需要进行大量清理。第一个helper列可以合并到进行TextJoin的公式中,在B列中。我很确定有一种方法可以为B列创建数组公式,但我想不起来。文本拆分可以组合成一个公式,但我将其分开,以便更清楚地说明每个正则表达式在做什么。

我发现它非常复杂,无法用几句话回答

以下是我的解决方案:

首先,我标记了文件的结尾,以便于查找最后一条消息的结尾。刚刚在邮件列表下方添加了***EOF单元格

然后我使用regexmatch提取登录时间。我把它从右边剪了18个字。查询在这里用于删除空行。

对于TO:FROM和其他单行单元格,我使用类似的方法(只需使用替换项删除TO:,等等):

然后我找出第一个主题的起始位置。我需要一个行号: 主题结尾也是如此(消息:从这里开始)

要确定MESSAGE:结束的行号,请检查存储在B列或文件末尾的下一次登录时间的位置: 这是这样的:

然后提取多行主题和消息内容非常容易,我使用偏移功能来实现这一点:


您好。如果您真的提供帮助,速度会更快。谢谢您的建议,我对这方面还是新手。抱歉,请在问题中发布您的代码。欢迎来到StackOverFlow。请借此机会学习如何使用,并且在示例表主题中可能包含1行或2行;消息中可能包含1行、2行或3行/单元格。这是真的吗e根据您的实际情况?换句话说,主题是否会运行超过2行?或者消息是否会运行超过3行?非常感谢您解释用于实现代码的步骤/公式!我对google sheets还是新手,不幸的是,google sheets和google data studio是我的工作中使用的主要技术最近刚被录用(我上周刚开始).我在以前的角色中主要使用SQL/Tableau,因此尽管我知道如何存储数据库和数据/如何将其与Tableau相结合以实现可视化,但我必须加快如何使用google sheets/data studio,因为从数据存储到可视化的所有工作都将在google sheets/data studio中完成我每天都会收到一份pdf文件,我所做的就是复制并粘贴这些信息,这样我就可以将其复制到我们的谷歌工作表文件中,我可能只是手动添加到这个主工作表中,因为它每天只有1-3个文件。当我从pdf文件复制到谷歌工作表时,结果就像我提供的样本工作表中的一样。尽管我理解这个公式las和逻辑,我不知道所有的功能、输入/输出和策略,当我尝试在表格中使用数据时。你使用了哪些资源/指南开始并学习最终成为电子表格大师?我在谷歌表格reddit wiki中查找,发现了关于Ben Collins的8门课程,价格为700美元,我是w
=IFERROR(ARRAYFORMULA(SUBSTITUTE(REGEXEXTRACT(B5:B,".*~SUBJECT: (.*)~MESSAGE: "),"~"," ")),"")