我正在测试下面的简单案例:
=LET(input, {"a,b;c,d;" ; "e,d;f,g;"},
BYROW(input, LAMBDA(item, TEXTJOIN(";",,TEXTSPLIT(item,",",";", TRUE)))))
因为TEXTJOIN
是TEXTSPLIT
的逆运算,所以输出应该与input
相同,但没有最后一个;
,但它不是这样工作的。
如果我尝试使用一个范围,它的工作:
它适用于单个字符串:
=LET(input, "a,b;c,d;", TEXTJOIN(";",,TEXTSPLIT(input,",",";", TRUE)))
它会传回:a,b;c,d
我在这里做错了什么?我认为这可能是一个bug。根据TEXTSPLIT文档,在使用字符串数组时,没有结合使用TEXTSPLIT
和BYROW
的约束。
1条答案
按热度按时间ivqmmu1c1#
不确定这是否是一个答案,但我想我会分享我的尝试。
我不认为这里的问题是
TEXTSPLIT()
。我尝试了不同的方法。首先,我尝试合并FILTERXML()
来进行拆分,得到了完全相同的结果。为了更好的衡量:然后,我尝试使用
T(IF(1,TEXTSPLIT("a,b;c,d;",{",",";"},,1)))
强制使用数组,但Excel不动。上面的内容让我相信问题实际上是
BYROW()
本身的问题。尽管文档中说第一个参数使用数组,但与其他数组函数一起工作似乎确实有 * bug *,你可以这样报告它。不管它现在值多少钱;您可以使用注解和链接答案中提到的
REDUCE()
,但我会保留它,用于更复杂的不均匀分布的列/行堆叠。在您的情况下,MAP()
可以工作,并且比BYROW()
简单:老实说,这就是
MAP()
的设计目的。