将 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 函数会读取原始值,并按照指定的格式代码生成文本。

选择日期格式

修改第二个参数,就可以生成不同形式的日期文本:

公式 示例结果
=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"))

这样,当源单元格为空时,结果也会保持为空。

将公式结果转换为静态文本

公式结果仍然与原始日期关联。如果需要独立保存文本值,可以按以下步骤操作:

  1. 选中包含 TEXT 公式的单元格。
  2. 按 Ctrl+C 复制。
  3. 右键单击目标单元格。
  4. 选择选择性粘贴 → 值。

粘贴后的单元格保存的是生成的字符串,而不是公式。如果准备替换原始日期列,请先完成这一步,再删除源数据。

适用场景: 将已有日期转换为指定格式,同时让转换过程在工作表中清晰可见。

方法三:使用分列功能将日期转换为文本

虽然名称是“分列”,但这个功能也可以在不拆分数据的情况下使用。在向导的最后一步,可以将输出类型设置为 文本 。微软支持社区也介绍过使用这种流程将日期转换为文本的方法。

以订单工作表为例:

  1. 选中 A 列中的日期单元格,不包含表头。
  2. 打开数据 → 分列。
  3. 选择分隔符号,然后点击下一步。
  4. 取消勾选所有分隔符,确保日期仍保留在同一列中。
  5. 再次点击下一步。
  6. 在列数据格式中选择文本。
  7. 将目标区域 设置为空白列,例如 $H$2。
  8. 点击完成。

使用空白列作为目标区域,可以先对比转换结果与原始日期,再决定是否替换源数据。

使用分列功能将日期转换为文本

这种方法的主要限制是格式控制。分列功能无法像 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from spire.xls import Workbook, FileFormat

# 1. 加载工作簿
workbook = Workbook()
workbook.LoadFromFile("订单日期.xlsx")

# 2. 获取第一个工作表
sheet = workbook.Worksheets.get_Item(0)

# 3. 遍历 A 列
last_row = sheet.Columns[0].LastRow

for i in range(2, last_row + 1):
cell = sheet.Range.get_Item(i, 1)

# 读取单元格中的日期对象
date_value = cell.DateTimeValue

# 将日期转换为指定格式的字符串
text_date = date_value.ToString("yyyy-MM-dd")

# 先将单元格格式设为文本,再写入字符串
cell.NumberFormat = "@"
cell.Text = text_date

# 4. 保存输出工作簿
workbook.SaveToFile(
"日期转文本.xlsx",
FileFormat.Version2016
)
workbook.Dispose()

将 订单日期.xlsx 放在脚本的工作目录中,或者将输入文件名替换为完整路径。

本示例假定所有待处理单元格都包含有效日期。如果日期列中包含空白单元格、备注或无效数据,需要在读取 DateTimeValue 之前增加数据验证。

下面的截图对比了原始日期值与 Python 脚本生成的文本字符串:

使用 Python 自动将日期转换为文本

理解关键步骤

转换过程主要由以下三项操作完成:

1
date_value = cell.DateTimeValue

这行代码从源单元格中读取日期值。

1
text_date = date_value.ToString("yyyy-MM-dd")

这行代码生成所需的日期字符串。其中,月份使用大写的 MM 表示。

1
2
cell.NumberFormat = "@"
cell.Text = text_date

这两行代码将单元格设为文本格式,并写入格式化后的字符串。写入字符串是关键步骤: 仅修改数字格式,不能完成同样的转换。

脚本将结果保存为单独的工作簿,保留输入文件以便对比。当前代码处理一个工作表中的一列数据;如果需要扩大自动化范围,可以将相同逻辑放入工作表循环或文件循环中。

适用场景: 需要在 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 的结果,保留月份和日期中的前导零。