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

b4wnujal  于 2023-04-22  发布在  Python
关注(0)|答案(2)|浏览(162)

我已经从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)
ss2ws0br

ss2ws0br1#

在您期望的输出中,彩色单元格后面的逻辑并不完全清楚。
无论如何,要读取/conditionnaly-format/write一个单元格范围(* 在同一个文件 * 上),使用以下命令:

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.

输出:

nzk0hqpo

nzk0hqpo2#

我使用下面给出的代码,它保持了格式,也改变了单元格的颜色条件.使用Pandas1.5.2(我不认为这有什么关系)和openpyxl 3.0.9.它保持meger,边框,字体样式,重量,家庭和颜色,因为它是在测试文件.

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')

相关问题