如何将Openpyxl单元格从文本格式转换为数字格式
问题原因
number_format设置无效的核心原因是csv.reader读取的所有内容默认都是字符串类型,哪怕内容是纯数字。openpyxl的数字格式仅对数值类型的单元格值生效,给字符串值设置数字格式不会自动触发类型转换,所以单元格始终以文本格式展示。
你之前对工作表、单元格单独设置General格式的操作,仅修改了格式属性,没有改变单元格存储值的类型,自然不会达到预期效果。
修正后代码
写入时直接将字符串类型的数值转为浮点型即可,不需要额外做多余的格式设置:
import csv import openpyxl as oxl input_file = r'C:\Python\Test.txt' output_file = r'C:\Python\Test.xlsx' wb = oxl.Workbook() ws = wb.active ws.title = "Waveform" with open(input_file, 'r') as data: reader = csv.reader(data, delimiter='\t') for row in reader: processed_row = [] for cell_val in row: # 存在表头时保留第一行文本,无表头可删除该判断段 if reader.line_num == 1: processed_row.append(cell_val) continue # 数值内容转浮点型,非数值内容保留原文本 try: processed_row.append(float(cell_val)) except ValueError: processed_row.append(cell_val) ws.append(processed_row) # 按需给数值列设置通用格式,值为数值类型时会自动按数字识别 for row in range(2, ws.max_row + 1): ws[f"A{row}"].number_format = 'General' ws[f"B{row}"].number_format = 'General' wb.save(output_file)
注意点
- 原代码重复导入openpyxl属于冗余写法,保留一个导入语句即可
number_format是单元格级属性,直接对工作表对象设置该属性不会生效- 如果文件全是数值无表头,可直接删除表头判断逻辑,所有值统一转浮点型写入即可
内容的提问来源于stack exchange,提问作者Nh K
相关产品推荐
相关产品推荐

