CSV 处理

如何在 Excel 中打开 CSV 文件而不破坏日期、前导零或编码

当您打开 CSV 文件时,阻止 Excel 吃掉前导零、损坏日期和乱码 UTF-8。保留数据的导入工作流程,以及针对损坏导入的人工智能辅助清理。

双击 CSV 文件是 Excel 中最危险的常见操作。它起作用了——文件打开,数据出现——并且可能已经发生了三种特定类型的损坏:

  • 前导零消失了。 邮政编码“02138”变为“2138”;产品代码“000451”变为“451”。
  • 看起来像日期的东西变成了日期。 基因名称“MARCH1”、分数“1/2”、代码“3-14”——全部默默转换。
  • 非 ASCII 文本出现乱码。 Müller 变成了 Müller,因为文件是 UTF-8 并且 Excel 猜测是旧编码。

这些都没有显示错误。您可以发现查找失败或客户电子邮件被退回的情况。以下是如何导入 CSVs,这样就不会发生这种情况。

安全方法:导入,不要打开

使用 数据→获取数据→来自文本/CSV (Power Query) 而不是双击:

  1. Excel 显示检测到的 文件来源(编码)的预览。如果看到乱码,请切换到65001: 统一码 (UTF-8)
  2. 点击转换数据控制列类型,或使用**加载到...**直接加载。
  3. 在 Power Query 编辑器中,显式设置每列的类型 - 并将类似代码的列(ZIP、SKU、电话)设置为 文本,而不是数字。

旧版 文本导入向导(在“文件”→“选项”→“数据”→“显示旧数据导入向导”下仍然可用)实现了相同的效果:选择“分隔符”,选择分隔符并设置列格式 - 文本 适用于任何带有前导零的内容。

修复已损坏的 CSV

如果文件已打开并保存并且损坏已修复:

前导零,当已知正确长度时:

=TEXT(A2, "00000")

恢复 5 位邮政编码。对于可变长度代码,没有公式修复 - 从原始文件重新导入。

变成数字的日期(您看到的是 45678 而不是日期):应用日期数字格式;底层序列通常是完整的。

变成日期的文本MARCH1 显示为 1-Mar):原始字符串无法单独从单元中恢复。重新导入该列并键入文本。

莫吉贝克üâ€" 序列):选择 UTF-8 重新导入。对于少数角色来说,查找并替换修复是可能的,但大规模时并不可靠。

分隔符惊喜

在许多欧洲语言环境中,列表分隔符是 ;,因此逗号分隔的文件将作为一个巨大的列打开(反之亦然)。在 Power Query 中,在预览对话框中明确设置分隔符。对于一次性修复,数据 → 文本到列 重新拆分单列导入。

引用字段是另一个经典:包含逗号的描述必须在源中引用;如果导出器未正确引用,则这些行的列会发生变化。通过检查应该具有一致类型的列,可以很容易地发现移动的行——例如=ISNUMBER(E2) 突然返回 FALSE 中间文件。

人工智能助手适合什么地方

在混乱的导入之后,您通常会留下一张混合损坏的表格:一些数字作为文本,一些日期采用两种格式,行的移动块。描述修复胜过逐列执行。侧边栏中有 Excel 的人工智能

“A 列应该是存储为文本的 5 位邮政编码 - 恢复丢失的前导零。D 列应该是日期 - 将任何文本日期转换为 YYYY-MM-DD 中的实际日期。标记列看起来发生偏移的行。”

加载项读取范围,应用转换,并且 - 因为它是 在更改任何内容之前验证其写入和备份的内容 - 您可以检查摘要,如果修复不是您想要的,则可以回滚。有关更广泛的清理工作流程,请参阅 8步数据清理清单

常见问题解答

为什么 Excel 会从 CSV 文件中删除前导零?

打开 CSV 直接使 Excel 猜测每一列的类型。数字字符串被视为数字,并且数字没有前导零。通过获取数据(或旧向导)导入并将这些列设置为文本以保留它们。

如何在 Excel 中正确打开 UTF-8 CSV?

使用数据 → 获取数据 → 从文本/CSV 并在预览中将文件来源设置为 65001: Unicode (UTF-8)。从源系统保存为“CSV UTF-8”(带 BOM)也有助于 Excel 在双击时检测到它。

我可以阻止 Excel 将值转换为日期吗?

是 — 导入时将受影响的列键入为文本。在 Excel 365 中,文件 → 选项 → 数据 → 自动数据转换还允许您禁用加载时的自动日期转换。