如何让CSV文件中不同小数位数的数值在Excel中正常显示
问题原因
CSV是纯文本格式,本身不存储单元格格式信息。Excel打开CSV文件时会默认将符合数值格式的文本自动转换为数值类型,使用通用格式展示,会自动省略末尾无意义的小数位,因此你在记事本里看到的15、15.0、15.00等原始文本会被统一识别为数值15,显示格式不符合预期。
解决方案
方案1:使用Python操作Excel的库直接生成xlsx文件(最稳定)
直接生成Excel原生格式文件,为每个单元格单独设置数值和显示格式,打开即可符合要求,不会出现格式丢失问题,可使用openpyxl库实现,示例代码如下:
from openpyxl import Workbook wb = Workbook() ws = wb.active # A1:显示为整数15 ws['A1'] = 15 ws['A1'].number_format = 'General' # A2:显示为1位小数15.0 ws['A2'] = 15.0 ws['A2'].number_format = '0.0' # A3:显示为2位小数15.00 ws['A3'] = 15.00 ws['A3'].number_format = '0.00' # A4:显示为3位小数15.000 ws['A4'] = 15.000 ws['A4'].number_format = '0.000' wb.save('目标文件.xlsx')
方案2:调整CSV导出规则,强制Excel识别为文本格式
如果必须导出CSV格式,可以在写入数值字符串时添加特殊标记,让Excel打开时将内容识别为文本,保留原始显示效果,两种常用实现方式如下:
import csv data = ['15', '15.0', '15.00', '15.000'] # 方式1:给数值字符串加制表符前缀 with open('test1.csv', 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f) for item in data: writer.writerow([f'\t{item}']) # 方式2:用="数值"格式包裹内容 with open('test2.csv', 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f, quoting=csv.QUOTE_NONE, escapechar='\\') for item in data: writer.writerow([f'="{item}"'])
该方案缺点是导出的单元格内容为文本类型,后续需要做数值计算时要额外转换格式。
方案3:不改动导出文件,打开CSV时手动调整Excel导入设置
- 打开Excel软件,点击「数据」选项卡→「获取外部数据」→「自文本/CSV」,选择你导出的CSV文件
- 在导入向导的第三步,选中对应数据列,将列数据格式设置为「文本」,完成导入后即可保留原始的字符串显示效果
内容的提问来源于stack exchange,提问作者Ranjan Pal
相关产品推荐
相关产品推荐

