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将数字格式设置为单元格但不起作用的主要内容,如果未能解决你的问题,请参考以下文章