导入功能在Numbers for iOS、iPadOS和macOS中可以将以逗号分隔值(CSV)和制表符分隔值(TSV)格式的数据解析到电子表格的字段中。然而,如果您导入从其他地方导出的数据或手动格式化的数据,并且这些数据不应被解释为数字,而应被解释为纯文本,您可能会遇到问题。
例如,美国邮政服务的邮政编码系统是您每天处理的数字中使用最多前导零或填充零的常见情况之一。在一个邮政编码中,比如04843,开头的零是邮政编码的必要组成部分,但如果您在一个字段中导入一个带有04843的CSV或TSV文件,Numbers(如Excel一样)会自动将其视为一个数字。该列会自动应用数值格式,并在转换为纯数字时删除那个零:4843。
错误是沉默的。如果您没有注意,您第一次知道出现问题是当邮局拒绝某个地址,或者您在以leading zeros开头或带有其他触发Numbers解释该字段为数字的格式的不常见数字时遇到类似的验证问题。
有一个简单的方法可以解决这个问题,这个方法是Excel用户多年来一直在使用的,但奇怪的是,在我使用过的任何导出CSV或TSV文件的工具中,这都不是一个标准选项。在CSV或TSV文件中,不要像,04843,
或<tab>04843<tab>
这样单独格式化一个数字,而是添加一个等号并将数字用引号括起来,如下所示:
="04843"
Numbers(和Excel)会将其视为纯文本。导入后,您可以选择列,并通过“Format Inspector”>“Cell”>“Data Format”明确将其设置为文本,选择“文本”。
现在,如果您无法控制CSV或TSV的生成方式怎么办?在打开或导入文件到Numbers之前,添加一个处理步骤。在像BBEdit这样的应用程序中(包括免费版本),使用“查找和替换”功能。以下是在备份文件后使用BBEdit的操作说明:
- 在BBEdit中打开CSV或TSV文件。
- 选择“搜索>查找”或按Command-F。
- 确保查找对话框中的复选框设置如下:取消选中“大小写敏感”和“整个单词”,选中“Grep”和“Wrap around”。
- 对于CSV文件的查找字段,输入
,(\d+?),
;对于TSV文件,输入\t(\d+?)\t
(下面我将重复这些步骤以确保准确性)。 - 对于CSV文件的替换字段,输入
,="\1",
;对于TSV文件,输入\t="\1"\t
。(同上) - 点击“全部替换”。
- 选择“文件>保存”或“文件>另存为”。
- 在Numbers中打开CSV或TSV文件。注意前导零!
上述模式表示“查找逗号(CSV)或制表符(TSV)之间的任何数字,并用”=数字”替换该数字。虽然这会导致所有导入的数字被视为纯文本,但可以使用“Format Inspector”更改所需列的单元格格式,以使Numbers对这些列的值按照数字处理。
为了进一步明确第4步和第5步,以下是在CSV中每个字段中复制和粘贴的内容:
- 在CSV中查找:
,(\d+?),
- 在CSV中替换:
,="\1",
对于TSV:
- 在TSV中查找:
\t(\d+?)\t
- 在TSV中替换:
\t="\1"\t
请注意,替换模式中的引号是直引号,不是弯引号或印刷引号。