You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:57:17