如何用Python读取.xlsx保留数字格式并导出为txt/csv
Python读取.xlsx保留原数字格式导出为txt/csv实现方案
完全不需要自行开发格式转换器,直接用openpyxl库即可实现需求,该库可以直接读取每个单元格在Excel界面实际显示的格式化内容,不需要提前预设列格式,哪怕同一列存在数十种不同数字格式也能完整保留。
核心原理
Pandas读取xlsx时默认提取单元格的底层存储数值,会自动剥离所有单元格级别的货币符号、小数位规则、自定义格式配置,因此无法满足需求。而openpyxl可以直接解析xlsx文件内嵌的单元格格式规则,返回用户在Excel中看到的最终显示文本,不存在格式丢失问题。
实现步骤
安装依赖库
执行命令安装所需依赖:pip install openpyxl参考实现代码
from openpyxl import load_workbook import csv # 加载目标xlsx文件,注意必须保持data_only=False参数 wb = load_workbook(filename="你的源文件路径.xlsx", data_only=False) # 选择需要读取的工作表,读取第一个工作表用wb.active,指定工作表可替换为wb["工作表名称"] ws = wb.active # 逐行读取所有单元格的格式化显示值 formatted_data = [] for row in ws.iter_rows(values_only=False): current_row = [cell.display_value for cell in row] formatted_data.append(current_row) # 导出为csv格式(用utf-8-sig编码避免Excel打开乱码) with open("输出结果.csv", "w", newline="", encoding="utf-8-sig") as csv_file: csv_writer = csv.writer(csv_file) csv_writer.writerows(formatted_data) # 如需导出为txt格式,可使用以下代码,分隔符可根据需求替换为制表符、逗号等 with open("输出结果.txt", "w", encoding="utf-8") as txt_file: for line in formatted_data: txt_file.write("\t".join([str(cell_content) for cell_content in line]) + "\n")
注意事项
- 加载工作簿时请勿修改
data_only=False的配置,否则会丢失格式关联,返回原始数值 - 读取到的
cell.display_value直接是Excel中展示的最终文本,例如货币格式$45.890924、百分比、千分位数值、自定义格式日期都会原样返回,不需要提前对列做格式分类预设 - 写入文件时直接按字符串类型写入即可,不要额外做数值类型转换,避免格式被自动转义
内容的提问来源于stack exchange,提问作者Finntech
相关产品推荐
相关产品推荐

