使用pandas.ExcelWriter()和engine = openpyxl

时间:2015-05-12 16:09:48

标签: python excel pandas openpyxl

我试图从模板文件中创建一堆excel文件,该文件包含我将填充数据的单元格范围的条件格式。

我从excel文件创建一个数据框,该文件包含状态中的所有机场,其中包含一堆描述机场的数据列。然后,我想为每个机场制作一个摘要文件,该文件基本上是机场提取的行,并作为列放入新的Excel文件中,并附加一些列。目前这一切都有效。

但是,当我将数据帧写入从模板excel文件创建的新文件时,新文件中的所有其他内容都会保留(其他已填充的单元格仍然存在),但条件格式设置不会显示。当我查看新文件中的条件格式规则时,规则就在那里,但格式部分被重置。见下图:

模板文件格式: template file formatting](borders present)

在新文件中格式化(从模板复制并从数据框填充): formatting in new file](no borders)

所以这里是代码:

创建输出文件名,复制模板并使用新名称保存:

# 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()

如前所述,新文件成功保留了模板文件中的现有单元格,填充了正确范围内的数据,甚至保留了条件格式化规则,但规则中的实际格式已重置。

有点失落,感谢任何帮助。

谢谢!

0 个答案:

没有答案