将 Excel 日期转换为文本的四种方法:手动操作与自动化处理
将 Excel 日期转换为文本的四种方法:手动操作与自动化处理
日期在 Excel 中看起来完全正确,复制到其他应用程序后,却可能出现不同的结果。例如,工作表中显示的是 2026-01-01,但在将它与文字拼接,或修改单元格格式后,得到的却是一个数字。
这是因为 Excel 将日期存储为数值,而日期的显示形式由单元格的数字格式决定。
当报表、导入模板或其他系统要求使用特定的日期字符串时,将日期转换为文本,可以让输出结果更加明确、可控。
本文介绍四种方法,从手动输入单个日期,到使用 Python 转换整列日期,分别适用于不同的处理场景。
开始之前:日期格式设置与文本转换的区别
改变日期的显示形式,并不会改变它的底层数据类型。
例如,应用自定义格式 yyyy-mm-dd 后,日期会显示为 2026-01-01,但 Excel 存储的仍然是日期数值。将它转换为文本后,单元格中保存的才是字符串 2026-01-01。Excel 的 TEXT 函数可以在转换为文本的同时,应用指定的格式。
| 操作 | 显示结果 | 底层数据 |
|---|---|---|
| 应用自定义日期格式 | 2026-01-01 | 日期数值 |
| 将日期转换为文本 | 2026-01-01 | 文本字符串 |
下面的示例以一份订单工作表为基础,其中包含以下数据:
| 订单日期 | 订单编号 | 客户名称 | 产品名称 | 数量 |
|---|---|---|---|---|
| 2026-01-01 | 订单-1003 | 海港物流 | 1TB 移动固态硬盘 | 2 |
| 2026-01-09 | 订单-1004 | 远峰教育 | USB-C 扩展坞 | 8 |
| 2026-02-14 | 订单-1005 | 蓝鸟贸易 | 网络摄像头 | 4 |
日期位于 A 列,第 1 行为表头。
在尝试会覆盖现有数据的方法之前,建议先保留一份原始工作簿。如果后续还需要进行日期计算,原始日期数据会很有用。
方法一:使用单引号将日期输入为文本
如果只需要手动输入少量日期,可以在日期前添加一个英文半角单引号('):
1 | '2026-01-01 |
按下 Enter 后,单元格显示为:
1 | 2026-01-01 |
单引号会告诉 Excel 将输入内容作为文本处理,不会作为单元格内容显示出来。微软也将这种方式列为防止 Excel 自动转换日期的方法之一。
你可以直接输入所需的日期形式:
| 输入内容 | 单元格显示结果 |
|---|---|
'2026-01-01 |
2026-01-01 |
'01/09/2026 |
01/09/2026 |
'20260101 |
20260101 |
适用场景: 在模板中手动输入少量日期字符串。
这种方法简单直接,但需要逐个输入或编辑。如果现有日期列包含数百条数据,下面几种方法会更方便。
方法二:使用 TEXT 函数将日期转换为文本
需要控制输出格式时,TEXT 函数是工作表中非常灵活的选择。
假设 A2 包含一个有效的 Excel 日期,在空白单元格中输入以下公式:
1 | =TEXT(A2,"yyyy-mm-dd") |
公式会返回类似下面的文本字符串:
1 | 2026-01-01 |
然后向下拖动填充柄,将公式应用到其余日期。TEXT 函数会读取原始值,并按照指定的格式代码生成文本。
选择日期格式
修改第二个参数,就可以生成不同形式的日期文本:
| 公式 | 示例结果 |
|---|---|
=TEXT(A2,"yyyy-mm-dd") |
2026-01-01 |
=TEXT(A2,"mm/dd/yyyy") |
01/01/2026 |
=TEXT(A2,"dd/mm/yyyy") |
01/01/2026 |
=TEXT(A2,"yyyymmdd") |
20260101 |
使用 mm 和 dd 可以保留月份和日期的前导零,适合要求固定长度日期文本的系统。
如果源数据列中包含空白单元格,可以使用:
1 | =IF(A2="","",TEXT(A2,"yyyy-mm-dd")) |
这样,当源单元格为空时,结果也会保持为空。
将公式结果转换为静态文本
公式结果仍然与原始日期关联。如果需要独立保存文本值,可以按以下步骤操作:
- 选中包含 TEXT 公式的单元格。
- 按 Ctrl+C 复制。
- 右键单击目标单元格。
- 选择选择性粘贴 → 值。
粘贴后的单元格保存的是生成的字符串,而不是公式。如果准备替换原始日期列,请先完成这一步,再删除源数据。
适用场景: 将已有日期转换为指定格式,同时让转换过程在工作表中清晰可见。
方法三:使用分列功能将日期转换为文本
虽然名称是“分列”,但这个功能也可以在不拆分数据的情况下使用。在向导的最后一步,可以将输出类型设置为 文本 。微软支持社区也介绍过使用这种流程将日期转换为文本的方法。
以订单工作表为例:
- 选中 A 列中的日期单元格,不包含表头。
- 打开数据 → 分列。
- 选择分隔符号,然后点击下一步。
- 取消勾选所有分隔符,确保日期仍保留在同一列中。
- 再次点击下一步。
- 在列数据格式中选择文本。
- 将目标区域 设置为空白列,例如
$H$2。 - 点击完成。
使用空白列作为目标区域,可以先对比转换结果与原始日期,再决定是否替换源数据。
这种方法的主要限制是格式控制。分列功能无法像 TEXT 函数一样指定 yyyy-mm-dd 这样的格式字符串。生成的日期形式可能受到区域日期设置的影响,因此需要检查结果,不能假定它会保留原单元格的自定义格式。
如果目标数据必须严格采用 20260101 或 2026-01-01 的形式,TEXT 函数可以提供更明确的转换规则。
适用场景: 不想输入公式,需要一次性获得静态文本的情况。
方法四:使用 Python 自动将日期转换为文本
对于偶尔执行的任务,手动操作已经足够。当日期转换需要作为报表生成或数据导出流程的一部分反复执行时,脚本就更有价值。
Spire.XLS for Python 可以读取、编辑和保存 Excel 工作簿,无需安装 Microsoft Excel。本示例使用它读取 A 列中的日期,并用格式化后的文本字符串替换原始值。
安装 Spire.XLS for Python
在终端中执行以下命令:
1 | pip install Spire.XLS |
将日期列转换为文本
以下代码处理第一个工作表中的 A 列 ,从第 2 行开始,跳过表头:
1 | from spire.xls import Workbook, FileFormat |
将 订单日期.xlsx 放在脚本的工作目录中,或者将输入文件名替换为完整路径。
本示例假定所有待处理单元格都包含有效日期。如果日期列中包含空白单元格、备注或无效数据,需要在读取 DateTimeValue 之前增加数据验证。
下面的截图对比了原始日期值与 Python 脚本生成的文本字符串:
理解关键步骤
转换过程主要由以下三项操作完成:
1 | date_value = cell.DateTimeValue |
这行代码从源单元格中读取日期值。
1 | text_date = date_value.ToString("yyyy-MM-dd") |
这行代码生成所需的日期字符串。其中,月份使用大写的 MM 表示。
1 | cell.NumberFormat = "@" |
这两行代码将单元格设为文本格式,并写入格式化后的字符串。写入字符串是关键步骤: 仅修改数字格式,不能完成同样的转换。
脚本将结果保存为单独的工作簿,保留输入文件以便对比。当前代码处理一个工作表中的一列数据;如果需要扩大自动化范围,可以将相同逻辑放入工作表循环或文件循环中。
适用场景: 需要在 Python 工作流程中重复执行日期转换的情况。
应该选择哪种方法?
可以根据数据的来源和处理频率选择合适的方法。
| 方法 | 适用场景 | 格式控制 | 输出结果 |
|---|---|---|---|
| 单引号 | 手动输入少量日期 | 按输入内容精确保存 | 静态文本 |
| TEXT 函数 | 将已有日期转换为指定格式 | 使用明确的格式代码 | 公式结果,可粘贴为静态值 |
| 分列功能 | 不使用公式的一次性转换 | 有限 | 静态文本 |
| Python | 在脚本中重复执行转换 | 使用明确的格式字符串 | 将文本写入输出工作簿 |
对于日常工作表操作, 通常可以优先考虑 TEXT 函数 ,因为转换规则容易查看和调整。
输入少量数据时,可以使用单引号;需要快速完成一次性转换,并且已经确认输出格式时,可以使用分列;需要建立可重复执行的处理流程时,则适合使用 Python。
常见问题
为什么将日期单元格的格式改为“文本”后,会显示一个数字?
Excel 将日期存储为数值。把单元格格式改为“文本”,不会自动将这个数值转换为具有指定格式的日期字符串。
可以使用 TEXT(A2,"yyyy-mm-dd") 生成所需的字符串。
如何检查转换后的日期是否确实为文本?
使用 ISTEXT 函数:
1 | =ISTEXT(A2) |
如果 A2 包含文本,返回 TRUE;如果包含日期数值,返回 FALSE。与仅观察单元格的显示效果相比,这种检查方式更可靠。
日期转换为文本后,还能进行日期计算吗?
文本字符串在计算中的表现不如原生日期稳定。部分公式可能会识别特定形式的日期字符串,但识别结果可能受到字符串格式和区域设置的影响。
如果需要计算日期间隔、按月份分组或执行其他日期操作,建议保留原始日期列。
如何保留日期文本中的前导零?
使用两位数的月份和日期格式。例如:
1 | =TEXT(A2,"yyyy-mm-dd") |
在 Python 示例中,使用:
1 | date_value.ToString("yyyy-MM-dd") |
两种方式都可以生成类似 2026-01-09 的结果,保留月份和日期中的前导零。







