使用openpyxl将日期格式更改为xlsx中的文本

时间:2018-04-09 09:14:28

标签: python excel openpyxl

我编写了一个从excel工作簿中读取并编写新工作簿的脚本。 每行都是一个单独的对象,其中一列是日期。 我使用datetime将日期写为NamedStyle,以获得我认为正确的格式:

    date_style = NamedStyle(name='datetime', number_format='YYYY-MM-DD')
    for row in range(2,ws_kont.max_row+1):
        ws_kont.cell(row = row, column = 4).style = date_style

问题是我需要将这个excel工作簿导入一个古老的数据库,由于某种原因他不接受日期格式化,只有这样的文本“yyyy-dd-mm”。 我在将这些单元格重写为文本时遇到了麻烦。

我尝试过使用= TEXT公式,但由于你无法使用单元格本身来计算结果,除非我复制了公式中的引用列,否则它不会工作:

name = str(ws_teg.cell(row = row, column = 4).coordinate)
date_f = "yyyy-mm-dd"
ws_kont[name] = "=TEXT(%s,%s)" % (name, date_f)

我需要在几个脚本中做一些这样的地方,所以我想知道是否有更简单的方法来做到这一点?

PS。我只是一名考古学家,试图通过一些简单的代码尝试在我的工作日自动执行某些任务,如果我看起来有点慢,请放轻松。

2 个答案:

答案 0 :(得分:2)

找到另一篇很好的用最少的代码写的文章:

writer = pd.ExcelWriter('Sample_Master_Data_edited.xlsx', engine='xlsxwriter', 
                        date_format='mm/dd/yyyy', datetime_format='mm/dd/yyyy')

Reference

答案 1 :(得分:1)

最有可能的是,它不足以改变您日期的格式 - 您必须将日期存储为字符串而不是日期时间对象。

循环显示列并使用datetime.strftime格式化日期:

for row in range(1, ws_kont.max_row+1):
    cell = ws_kont.cell(row = row, column = 4)
    cell.value = cell.value.strftime('%Y-%m-%d')