如何用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
相关产品推荐
相关产品推荐

