如何用openpyxl替换特定列中的值?

时间:2015-05-11 07:27:47

标签: python python-3.x openpyxl

我想用标准格式dd-mm-yyyy替换特定格式的日期。第10列中的实际日期类似于6.20177.2017,其中7是月份,2017是年份。我只需要在所有值之前添加1-,然后我想用-(连字符)替换日期值中的点。因此输出看起来像1-6-20171-7-2017。请注意,该列可能包含none个值。在这种情况下,我想跳过这些没有值。

这就是我试过的,

from openpyxl import load_workbook
wb = load_workbook(r'E:\foo\Python\stocktable.xlsx')
ws = wb.get_active_sheet()
for rownum in range(2, ws.get_highest_row()):
    print(str(ws.cell(row=rownum, column=10).value))

输出:

6.2017
7.2016
7.2017
6.2017
7.2017
7.2017
2.2016
7.2017
8.2016
None

所以我在上面的代码中加了一点点调整,以适应我的情况。但它失败了。

from openpyxl import load_workbook
wb = load_workbook(r'E:\foo\Python\stocktable.xlsx')
ws = wb.get_active_sheet()
for rownum in range(2, ws.get_highest_row()):
    ws.cell(row=rownum, column=10).value = '1-' + str(ws.cell(row=rownum, column=10).value.replace('.', '-')

wb.save(r'E:\foo\Python\stocktable.xlsx')  

也就是说,它显示了一个symtax​​错误,如

File "E:\foo\Python\python-excel.py", line 7
    wb.save() 
     ^
SyntaxError: invalid syntax

2 个答案:

答案 0 :(得分:0)

如果您只想更改日期或时间的格式,则只需更改单元格的number_format

for row in range(2, ws.max_row):
   cell = ws.cell(row=row, column=10)
   cell.number_format = "dd-mm-yyyy"

答案 1 :(得分:-1)

好的,我发现了问题,下面的代码对我有用。

from openpyxl import load_workbook
wb = load_workbook(r'E:\foo\Python\stocktable.xlsx')
ws = wb.get_active_sheet()
for rownum in range(2, ws.get_highest_row()):
    try:
        month, year = str(ws.cell(row=rownum, column=10).value).split(".")
        ws.cell(row=rownum, column=10).value = '1-' + str(month) + '-' + str(year) 
    except ValueError:
        pass    

wb.save(r'E:\foo\Python\stocktable.xlsx') 

就像@shahkalpesh在他的评论中所说的那样,我只是根据点分割字符串(首先它是浮点格式,所以我将它转换为字符串然后根据点进行拆分)并将值保存到{{ 1}}和month变量。

然后我将代码放在year try块中,因为该列包含except值。