所以我有一个清理Excel文件的代码,它运行得很好,但是一些奇怪的事情发生了,我的一些单元格随机没有更新它们的样式。我将第10-12列设置为代码中定义的date_样式,但有时工作表中的单元格没有更新。代码如下:
from datetime import datetime
from openpyxl.styles import NamedStyle
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
import openpyxl, os
wb = openpyxl.load_workbook('Opportunities.xlsx', data_only=True)
sheet = wb['OpportunityList']
date_style = NamedStyle(name='datetime', number_format='MM/DD/YYYY')
bold = Font(bold=True)
no_fill = PatternFill(fill_type=None)
print('Deleting row ' + str(sheet.max_row))
sheet.delete_rows(sheet.max_row)
#Loop through the rows and update/delete as needed
for rowNum in range(sheet.max_row, 1, -1): #start with the last row
sheet.cell(row = rowNum, column = 10).value = datetime.strptime\
(sheet.cell(row = rowNum, column = 10).value, '%m/%d/%Y').date()
sheet.cell(row = rowNum, column = 11).value = datetime.strptime\
(sheet.cell(row = rowNum, column = 11).value, '%m/%d/%Y').date()
sheet.cell(row = rowNum, column = 12).value = datetime.strptime\
(sheet.cell(row = rowNum, column = 12).value, '%m/%d/%Y').date()
sheet.cell(row = rowNum, column = 10).style = date_style
sheet.cell(row = rowNum, column = 11).style = date_style
sheet.cell(row = rowNum, column = 12).style = date_style
if sheet.cell(row = rowNum, column = 10).value <=\
datetime.strptime('7/31/2017', "%m/%d/%Y").date():
print('Deleting row ' + str(rowNum))
sheet.delete_rows(rowNum)
if sheet.cell(row = rowNum, column = 4).value ==\
'Open' and sheet.cell(row = rowNum, column = 11).value <=\
datetime.strptime('12/31/2016', "%m/%d/%Y").date():
print('Deleting row ' + str(rowNum))
sheet.delete_rows(rowNum)
if sheet.cell(row = rowNum, column = 10).value <\
sheet.cell(row = rowNum, column = 11).value:
sheet.cell(row = rowNum, column = 11).value =\
sheet.cell(row = rowNum, column = 10).value
for rowNum in sheet['1:1']:
rowNum.font = bold
rowNum.fill = no_fill
for col in sheet.columns:
column = col[0].column # Get the column name
sheet.column_dimensions[column].width = 20
wb.save('Updated_Opportunities.xlsx')
看一张截图看看我在说什么:
如您所见,有些单元格保持默认的“yyyy-mm-dd”样式,我不知道为什么。这3列本来都是文本列,所以for循环肯定会将它们更新为日期类型,只是格式部分有时会失败。几乎所有3列中的单元格都会更新,但有一些异常值,我没有解释。这没什么大不了的,但我是个初学者,所以也许我在for循环中做了一些不知道的错误。在
提前谢谢
目前没有回答
相关问题 更多 >
编程相关推荐