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

如何用openpyxl原样获取Excel中逗号分隔的浮点数值?

读取Excel中逗号作为小数点的数值

为什么直接读取是点分隔?

Excel的数值在内部存储时统一使用点作为小数点,逗号只是单元格的显示格式,并非实际存储值。所以用openpyxl或pandas直接读取.value拿到的是标准浮点型,自然是点分隔形式。

解决方案

方法1:用openpyxl手动转换数值格式

拿到数值后,可直接替换小数点为逗号,或用locale模块匹配对应区域的格式规则:

from openpyxl import load_workbook
import locale

# 设置对应区域(以德语区为例,默认用逗号做小数点)
locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF-8')

ref_workbook = load_workbook('file.xlsx')
sheet_ranges = ref_workbook['Sheet']

cell = sheet_ranges['C2']
if cell.value is not None and isinstance(cell.value, (int, float)):
    # 按区域格式转换为带逗号的字符串
    formatted_value = locale.format_string("%g", cell.value, grouping=False)
    # 简单场景也可直接替换:formatted_value = str(cell.value).replace(".", ",")
print(formatted_value)  # 输出4,2

方法2:读取单元格的显示文本(Windows专属)

如果需要完全匹配Excel界面显示的内容,可调用本地Excel程序读取显示文本:

import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(r'C:\path\to\file.xlsx')
ws = wb.Worksheets('Sheet')

# 获取单元格显示的原始文本
cell_text = ws.Range('C2').Text
print(cell_text)  # 输出4,2

wb.Close()
excel.Quit()

方法3:用pandas指定区域格式处理

通过locale配合pandas的格式设置,批量转换数值列:

import pandas as pd
import locale

locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF-8')
pd.set_option('display.float_format', lambda x: locale.format_string("%g", x))

df = pd.read_excel('file.xlsx')
# 将目标列转换为带逗号的字符串格式
df['目标列'] = df['目标列'].apply(lambda x: locale.format_string("%g", x) if pd.notnull(x) else x)
print(df)

注意事项

  • 遇到空值(如示例中的None)需做判空处理,避免转换报错。
  • locale设置依赖系统已安装的区域语言包,Linux/macOS可能需要额外安装对应语言包。

内容的提问来源于stack exchange,提问作者Alexandr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:45:48