openpyxl将数字格式设置为单元格但不起作用

Posted

技术标签:

【中文标题】openpyxl将数字格式设置为单元格但不起作用【英文标题】:openpyxl set nunmber format to cell but doesn't work 【发布时间】:2019-02-02 03:21:26 【问题描述】:

我想通过从 csv 文件中读取数据来创建一个 excel。 所以,我在 python 中使用 Openpyxl 和 CSV。 但是,无论number_format 我在代码中输入了来自 csv 的单元格值都保持为“文本”格式

from openpyxl import load_workbook
import csv
from openpyxl.styles import numbers

ws= load_workbook('myworkbook.xlsx')    
with open("myfile.csv", "r", newline="", encoding="utf16") as f:
    mydata=csv.reader(f,delimiter='|')
    for row in mydata:
        for col_index,col_data in enumerate(row,3):
            ws.cell(row=new800row_count, column=col_index, value=col_data).number_format = numbers.FORMAT_NUMBER

假设我的 csv 文件包含 800、200、100 个数据值。 使用我上面的代码后。它不是以数字格式(excel)显示 800、200、100,而是告诉我这个单元格包含存储为文本的数字,即使实际的 excel 格式告诉我它是一个数字

提前感谢您的帮助。

【问题讨论】:

CSV 中的所有内容都是字符串,因此您需要将相关值转换为代码中的数字。 【参考方案1】:

遍历你的数据集,如果它是一个字符串,则将数据转换为浮点数:

str = '1234.0'
data = float(str)
row[col] = data
row[col].number_format = '#,##0.00'

最后一行代码确保其格式为数字。进行上述更改后不要忘记保存文件。

【讨论】:

【参考方案2】:

CSV 阅读器旨在简单,并始终为您提供文本。 Openpyxl 也不会隐式进行转换。您需要先将文本转换为数字。比如每一行的循环下:

row = [float(cell) if cell.isdigit() else cell for cell in row]

然后根据需要使用该行。

【讨论】:

谢谢。但是,它不起作用。但我注意到,如果我用“F2”按单个单元格并输入。由于单元格格式为数字,列将自动转换为数字。那么,您知道如何使用 python 或 VBA 刷新工作表中的所有单元格吗?

以上是关于openpyxl将数字格式设置为单元格但不起作用的主要内容,如果未能解决你的问题,请参考以下文章

openpyxl条件格式设置数字格式

UILabel 应该产生省略号但不起作用

Openpyxl不修改单元格值

使用 OpenPyxl 2.02 的单元格颜色

wps excel VLOOKUP匹配不出来 不起作用 无效 #N/A不显示的解决办法

excel条件格式不起作用?