我试图从模板文件中创建一堆excel文件,该文件包含我将填充数据的单元格范围的条件格式。
我从excel文件创建一个数据框,该文件包含状态中的所有机场,其中包含一堆描述机场的数据列。然后,我想为每个机场制作一个摘要文件,该文件基本上是机场提取的行,并作为列放入新的Excel文件中,并附加一些列。目前这一切都有效。
但是,当我将数据帧写入从模板excel文件创建的新文件时,新文件中的所有其他内容都会保留(其他已填充的单元格仍然存在),但条件格式设置不会显示。当我查看新文件中的条件格式规则时,规则就在那里,但格式部分被重置。见下图:
模板文件格式:
在新文件中格式化(从模板复制并从数据框填充):
所以这里是代码:
创建输出文件名,复制模板并使用新名称保存:
# ap is the single airport row extracted from the master frame (series here)
ap_name = ap['Airport Name'].replace('/', '-').strip()
ap_id = ap['Airport Identifier']
file_name = '{} ({}).xlsx'.format(ap_name, ap_id)
output_ap_file = path.join(output_folder, file_name)
shutil.copy(input_template_file, output_ap_file) # copy template and create new file
注意:如果我查看上一步中创建的文件,格式化工作正常。我可以添加我的触发器单元格并添加行边框
清理新机场系列,并将其作为包含其他cols的数据框:
ap = ap.dropna()
ap.name = 'Existing Data'
ap = ap.reset_index().rename(columns={'index': 'Information'})
ap.insert(len(ap.columns), 'Current Information?', np.nan)
ap.insert(len(ap.columns), 'Corrected Information', np.nan)
定义编写器并将数据帧写入新文件:
writer = pd.ExcelWriter(output_ap_file, engine='openpyxl')
book = load_workbook(output_ap_file)
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
ap.to_excel(writer, index=False, startrow=start_row)
writer.save()
如前所述,新文件成功保留了模板文件中的现有单元格,填充了正确范围内的数据,甚至保留了条件格式化规则,但规则中的实际格式已重置。
有点失落,感谢任何帮助。
谢谢!