在这里寻求一些帮助,我试图在Google表格上将文本转换为持续时间格式的时间,我使用了一些基本函数来细分文本(分隔符为d(天)h(小时)m(分钟)和s (第二)转换为随后烘焙到时间函数中的值,但是对于超过 24 小时的输出,我无法使其正确格式化,即在下图中,375 小时应显示 375:00:00 或 [H]:mm: SS
这里有什么想法吗?
共享文档
https://docs.google.com/spreadsheets/d/1YWHM5tPaLOulHMbfdR8CZJsER7LBceWLQrm9f8JcV9c/edit#gid=0
尝试:
=FLATTEN(INDEX(QUERY(, "select "&TEXTJOIN(",", 1,
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B7:B27,
"d", "*86400"), "h", "*3600"), "m", "*60"), "s", "*1"), " ", "+")))/86400, 2))
改进版:
=INDEX(IFERROR(1/(1/BYROW(B3:B15, LAMBDA(i, LET(x, "(\d+)\s*", SUM(IFERROR(
REGEXEXTRACT(i, x&{"d"; "h"; "m"; "s"}), 0)*{86400; 3600; 60; 1})/86400))))))
使用
regexextract()
,如下所示:
=arrayformula(
iferror(regexextract(B7:B, "(\d+)\s*h"), 0) & ":" &
iferror(regexextract(B7:B, "(\d+)\s*m"), 0) & ":" &
iferror(regexextract(B7:B, "(\d+)\s*s"), 0)
)
公式给出文本字符串。要获取数字持续时间,请使用
value()
,如下所示:
=arrayformula(
iferror( 1 /
value(
iferror(regexextract(B7:B, "(\d+)\s*h"), 0) & ":" &
iferror(regexextract(B7:B, "(\d+)\s*m"), 0) & ":" &
iferror(regexextract(B7:B, "(\d+)\s*s"), 0)
)
^ -1 )
)
将结果列格式化为 格式 > 数字 > 持续时间。
如果您要转换的文本字符串中有许多组件,则仅使用一个
regextextract()
可能会有所帮助,这可以使用最近引入的 lambda 函数:
=arrayformula(
map(
B7:B,
lambda(
duration,
if(
len(duration),
join(
":",
iferror(
regexextract(
duration,
{ "(\d+)\s*h"; "(\d+)\s*m"; "(\d+)\s*s" }
),
0
)
),
iferror(1/0)
)
)
)
)
请参阅此答案,了解日期和时间值在电子表格中如何工作的说明。