如何使用Python中的原始工作表格式将表格保存到Excel工作表?

问题描述 投票:0回答:2

我已经从应用了单元格格式(边框、合并、字体...)的 Excel 工作表中加载了数据

然后,我使用Python中的条件语句在特定条件下为单元格着色。我想再次应用此样式保存表格,并保持原始 Excel 工作表的格式如下。

我该如何编码? 我已经尝试过以下,但我没有得到想要的。

import pandas as pd
import numpy as np
from openpyxl import load_workbook

workbook = openpyxl.load_workbook('test.xlsx')
worksheet = workbook['Tables']


# Load the DataFrame from the Excel file
df = pd.read_excel('test.xlsx', sheet_name='Tables')

# Define the column list
column_list = df.columns.to_list()[3:]

# Define the color function
def color(df, subset=column_list, up=5, low=-5):
    tmp = df[column_list].sub(pd.to_numeric(df['Unnamed: 2'], errors='coerce'), axis=0)
    return pd.DataFrame(np.select([tmp.gt(up), tmp.lt(low)],
                                  ['background-color: #e6ffe6;',
                                   'background-color: #ffe6e6;'],
                                  None), columns=subset, index=df.index
                       ).reindex_like(df)

df.style.apply(color, axis=None).to_excel('result.xlsx', engine='openpyxl', index=False)


   
python excel styles openpyxl
2个回答
1
投票

预期输出中彩色单元格背后的逻辑并不完全清晰。

无论如何,要读取/有条件地格式化/写入一系列单元格(在同一文件上),请使用以下命令:

import openpyxl
from openpyxl.styles import PatternFill

workbook = openpyxl.load_workbook('filename.xlsx')

worksheet = workbook['Sheet1']

for row in worksheet.iter_rows(min_row=3, min_col=3, max_col=9):
    for cell in row:
        if cell.value == 1: # <-- change the condition(s) here
            cell.fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')

workbook.save('filename.xlsx') # here, we write on the same file while keeping/updating the old F.

输出:


-1
投票

我使用了下面给出的代码,它保留了格式,并且还根据条件更改了单元格颜色。 使用 pandas 1.5.2 (我不认为它有什么关系) 和 openpyxl 3.0.9。它保持测试文件中的合并、边框、字体样式、粗细、系列和颜色。

import openpyxl
from openpyxl.styles import PatternFill

workbook = openpyxl.load_workbook('test.xlsx')

worksheet = workbook['Sheet1']
for row in worksheet.iter_rows(min_row=2, min_col=1, max_col=3):
   if row[0].value > 1:
      row[2].fill = PatternFill(start_color="FDFF00", end_color="FDFF00", fill_type='solid')

workbook.save('newfilename.xlsx')

© www.soinside.com 2019 - 2024. All rights reserved.