OpenPyxl number_format不修改从公式派生的单元格值

时间:2018-10-01 23:20:28

标签: python excel openpyxl

Openpyxl的'number_format'不会修改从公式得出的单元格值,因为结果值是Python中的String类型。

对于需要读取轨迹信息的软件,我需要使用特定自定义格式的数据。

注意:我已经在这里看到了相同的问题:https://bitbucket.org/openpyxl/openpyxl/issues/376/number-format-not-refreshing-cells

  

我同意最初的答案:问题是excel不在缓存中存储由公式得出的数据。数据存储为字符串。我只是不确定一旦Openpyxl读取数据后如何将数据从String更改为int:

import csv
import openpyxl
from openpyxl.styles import Alignment

wb = openpyxl.Workbook()
ws = wb.active
wb.active
f = open(r"...\....\...\automated.csv")
reader = csv.reader(f, delimiter=',')

for row in reader:
    ws.append(row)
f.close()
wb.save(r"...\...\...\...\automated.xlsx")

sheet=wb.active
wb.guess_types = True
sheet['F1'] = '***** Time Start'
rowNumber = 2  # Start reading from row 3
for i, cellObj in enumerate(ws, 3):  # 3 is the starting row to write on
    rowNumber += 1
    cellObj = ws.cell(row=i, column=6)  # 6 is the column to start writing on
    cellObj.value = '=OFFSET(B6,E{0},0)'.format(str(rowNumber).format(i))
    cellObj.number_format = 'dd mmm yyyy hh:mm:ss.000 "UTCG"'
    if i == 25:
        break
ws = wb.active

wb.save(r"...\...\...\...\automated.xlsx")

我知道代码正在工作,因为存储为'0'的值已被代码完美修改(请参见突出显示),因为它们对该单元格不使用任何公式:

Excel Output

注意:number_format应用于所有单元格(我检查了每一行):

result of number_format in output

但是由于单元格是字符串,所以它不能反映更改。

  
    

我对Python相当陌生,并尝试将cellObj.value转换为int,但这没有用。

  

任何有关此操作的帮助或建议,将不胜感激。在过去的4天里,我一直在研究Stack Overflow,但没有找到解决此问题的任何方法。谢谢!

edit:我正在使用最新版本的openpyxl 2.5.3,并尝试了以下方法: openpyxl python - writing csv to excel gives 'number formatted as text',但没有用-我所有的值都变成了零:

Output Result Null

1 个答案:

答案 0 :(得分:1)

您将需要使用strptime方法将字符串转换为日期时间对象。