使用 Styleframe 从 Excel 中提取单个单元格的样式
Using Styleframe to pull styles of individual cells from Excel
我正在尝试编写一个将两个 excel 文件合并在一起的脚本。一个已经过手工处理,并对其进行了一系列自定义格式设置,另一个是自动生成的文件。在 pandas 中进行合并很简单,但事实证明保留格式很麻烦。我找到了 styleframe 库,它似乎应该简化我正在尝试做的事情,因为除了原始数据之外,它还可以导入样式信息。但是,我在实际执行代码时遇到了问题。
我的问题是:如何从 excel 中的每个单元格中提取样式信息,然后将其应用到我的合并数据框中?请注意,数据在列或行中的格式不一致,因此我认为我无法以这种方式应用样式。这是我的代码的相关部分:
#iterate thorough all cells of merged dataframe
for rownum, row in output_df.iterrows():
for column, value in row.iteritems():
filename = row['File Name']
cur_style = orig_excel.loc[orig_excel['File Name'] == filename, column][0].style #pulls the style of relevant cell in the original excel document
target_style = output_df.loc[output_df['File Name'] == filename, column][0].style #style of the cell in the merged dataframe
target_style = cur_style #set style in current output_df cell to match original excel file style
此代码运行(缓慢)但它似乎并未实际将任何样式应用到输出样式框架
查看文档后,我并没有真正看到在单个样式框架容器级别应用样式的方法——一切都旨在将其作为行或列来应用。看来您还需要使用样式器对象来设置样式。
想通了。我重新调整了我的数据框,这样我就可以只使用 .at
而不是 .loc
查找。这个,加上 apply_style_by_indexes
方法让我到达了我需要去的地方:
for index, row in orig_excel.iterrows():
for column, value in row.iteritems():
index_num = output_df.index.get_loc(index)
#Pull style to copy to new df
cur_style = orig_excel.at[index, column].style
#Apply original style to new df
output_df.apply_style_by_indexes(output_df.index[index_num],
cur_style,
cols_to_style = column)
我正在尝试编写一个将两个 excel 文件合并在一起的脚本。一个已经过手工处理,并对其进行了一系列自定义格式设置,另一个是自动生成的文件。在 pandas 中进行合并很简单,但事实证明保留格式很麻烦。我找到了 styleframe 库,它似乎应该简化我正在尝试做的事情,因为除了原始数据之外,它还可以导入样式信息。但是,我在实际执行代码时遇到了问题。
我的问题是:如何从 excel 中的每个单元格中提取样式信息,然后将其应用到我的合并数据框中?请注意,数据在列或行中的格式不一致,因此我认为我无法以这种方式应用样式。这是我的代码的相关部分:
#iterate thorough all cells of merged dataframe
for rownum, row in output_df.iterrows():
for column, value in row.iteritems():
filename = row['File Name']
cur_style = orig_excel.loc[orig_excel['File Name'] == filename, column][0].style #pulls the style of relevant cell in the original excel document
target_style = output_df.loc[output_df['File Name'] == filename, column][0].style #style of the cell in the merged dataframe
target_style = cur_style #set style in current output_df cell to match original excel file style
此代码运行(缓慢)但它似乎并未实际将任何样式应用到输出样式框架
查看文档后,我并没有真正看到在单个样式框架容器级别应用样式的方法——一切都旨在将其作为行或列来应用。看来您还需要使用样式器对象来设置样式。
想通了。我重新调整了我的数据框,这样我就可以只使用 .at
而不是 .loc
查找。这个,加上 apply_style_by_indexes
方法让我到达了我需要去的地方:
for index, row in orig_excel.iterrows():
for column, value in row.iteritems():
index_num = output_df.index.get_loc(index)
#Pull style to copy to new df
cur_style = orig_excel.at[index, column].style
#Apply original style to new df
output_df.apply_style_by_indexes(output_df.index[index_num],
cur_style,
cols_to_style = column)