我正在处理比利时 Excel 365 工作簿。我刚刚导入了一个日期列表,如下所示:
dinsdag 5 december 2023 11:55:55
dinsdag 5 december 2023 11:55:56
dinsdag 5 december 2023 11:55:57
(“dinsdag” 表示星期二,其余的意思显而易见)
Excel 无法将其识别为日期时间,因此我想将日期时间转换为该格式,并使用该格式的描述来解释 Excel 要做什么。
不幸的是,这似乎不起作用:在另外两个单元格中,我输入Ctrl;并修改了时间“12:34:56”,我看到的是:
(单元格格式设置为[$-x-sysdate]dddd, mmmm dd, jjjj u:mm:ss
,其中j
代表“jaar”(“年”)和u
“uur”(“小时”))
下面的单元格(“E3”)具有单元格格式u:mm:ss
。
在我看来,这毫无意义:单元格“E3”明确指出单元格格式u:mm:ss
显示时间为“12:34:56”,那么为什么我在单元格“E2”中看不到时间戳?(供您参考,我放大了单元格,但仍然没有看到时间戳)
此外,一旦我有了正确的格式,是否有一个=DateFromText()
基于格式的函数,我可以使用,例如:
=DateFromText(A1, "[$-x-sysdate]dddd, mmmm dd, jjjj u:mm:ss")
提前致谢
答案1
答案2
可能有更好的方法可以做到这一点,但您可以使用自定义 LAMBDA 函数将文本转换为实际日期:
=LAMBDA(_input, LET(
_array, TEXTSPLIT(_input, " "),
_day, INDEX(_array, 2),
_month, MATCH(INDEX(_array, 3), {"januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"}, 0),
_year, INDEX(_array, 4),
_time, INDEX(_array, 5),
DATE(_year, _month, _day)+TIMEVALUE(_time)
))
或者如果你的系统分隔符是“;”而不是“,”:
=LAMBDA(_input; LET(
_array; TEXTSPLIT(_input; " ");
_day; INDEX(_array; 2);
_month; MATCH(INDEX(_array; 3); {"januari";"februari";"maart";"april";"mei";"juni";"juli";"augustus";"september";"oktober";"november";"december"}; 0);
_year; INDEX(_array; 4);
_time; INDEX(_array; 5);
DATE(_year; _month; _day)+TIMEVALUE(_time)
))
要添加此功能,只需转到名称管理器并添加一个新的命名范围,并以公式作为其值:
然后,只需在电子表格中调用该函数:
请注意,结果是真实的日期/时间,您可以根据自己的喜好更改显示格式。
该函数的工作原理如下:它将文本作为参数,并将其拆分为一个数组,使用空格作为分隔符。因此数组包含:
- 当天的名称(您不需要它)
- 数字表示的日期
- 月份名称
- 以数字表示的年份
- 时间格式为 hh:mm:ss
使用 INDEX 函数访问这 5 个值,您可以使用 DATE() 函数重新创建日期,并使用 TIMEVALUE() 函数将文本格式的时间转换为实际时间格式。添加 DATE 和 TIMEVALUE 会创建一个日期/时间。
请注意,需要使用 MATCH 函数将月份名称转换为数字。我手动添加了比利时语名称,但可以轻松编辑这 12 个值以匹配任何语言。
有关 lambda 函数的更多信息:https://exceljet.net/functions/lambda-function