excel 使用字符串数组作为输入时,TEXTSPLIT与BYROW组合返回意外结果

col17t5w  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(188)

我正在测试下面的简单案例:

=LET(input, {"a,b;c,d;" ; "e,d;f,g;"},
  BYROW(input, LAMBDA(item, TEXTJOIN(";",,TEXTSPLIT(item,",",";", TRUE)))))

因为TEXTJOINTEXTSPLIT的逆运算,所以输出应该与input相同,但没有最后一个;,但它不是这样工作的。
如果我尝试使用一个范围,它的工作:

它适用于单个字符串:

=LET(input, "a,b;c,d;", TEXTJOIN(";",,TEXTSPLIT(input,",",";", TRUE)))

它会传回:a,b;c,d
我在这里做错了什么?我认为这可能是一个bug。根据TEXTSPLIT文档,在使用字符串数组时,没有结合使用TEXTSPLITBYROW的约束。

ivqmmu1c

ivqmmu1c1#

不确定这是否是一个答案,但我想我会分享我的尝试。
我不认为这里的问题是TEXTSPLIT()。我尝试了不同的方法。首先,我尝试合并FILTERXML()来进行拆分,得到了完全相同的结果。为了更好的衡量:

=BYROW({"a,b;c,d;","e,d;f,g;"},LAMBDA(item,TEXTJOIN(";",,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(item,",",";"),";","</s><s>")&"</s></t>","//s"))))

然后,我尝试使用T(IF(1,TEXTSPLIT("a,b;c,d;",{",",";"},,1)))强制使用数组,但Excel不动。
上面的内容让我相信问题实际上是BYROW()本身的问题。尽管文档中说第一个参数使用数组,但与其他数组函数一起工作似乎确实有 * bug *,你可以这样报告它。
不管它现在值多少钱;您可以使用注解和链接答案中提到的REDUCE(),但我会保留它,用于更复杂的不均匀分布的列/行堆叠。在您的情况下,MAP()可以工作,并且比BYROW()简单:

=LET(input, {"a,b;c,d;";"e,d;f,g;"},
  MAP(input, LAMBDA(item, TEXTJOIN(";",,TEXTSPLIT(item,",",";", TRUE)))))

老实说,这就是MAP()的设计目的。

相关问题