Python如何优秀绘制背景单元格

条件满足时,需要对背景单元格进行着色。

import xlrd import xlsxwriter workbook = xlsxwriter.Workbook('file2.xlsx') worksheet = workbook.add_worksheet() format = workbook.add_format() format.set_font_color('red') excel_data_file1 = xlrd.open_workbook('file1.xlsx') sheet_file1 = excel_data_file1.sheet_by_index(0) excel_data_file2 = xlrd.open_workbook('file2.xlsx') sheet_file2 = excel_data_file2.sheet_by_index(0) col1 = sheet_file1.col(colx=0) col2 = sheet_file2.col(colx=0) a=set() for i in range(len(col1)): a.add(sheet_file1.cell_value(rowx=i, colx=0)) for j in range(len(col2)): cellVal2 = sheet_file2.cell_value(rowx=j, colx=0) if cellVal2 not in a: worksheet.write_blank(j, 0, format) 

通过做

 worksheet.write_blank(j, 0, format) 

不起作用,表格中的所有值都将被删除

这里是一个小演示,它使用pandas模块 。

我们先来生成两个示例Excel文件:

 import pandas as pd pd.DataFrame(np.random.randint(10, size=(5, 3)), columns=list('abc')) \ .to_excel('d:/temp/f1.xlsx', index=False) pd.DataFrame(np.random.randint(10, size=(5, 3)), columns=list('abc')) \ .to_excel('d:/temp/f2.xlsx', index=False) 

现在我们将读取/parsing成Pandas.DataFrame的:

 In [89]: df1 = pd.read_excel(r'D:\temp\f1.xlsx') In [90]: df2 = pd.read_excel(r'D:\temp\f2.xlsx') In [91]: df1 Out[91]: abc 0 0 5 3 1 9 4 9 2 3 6 5 3 9 1 5 4 2 5 0 In [92]: df2 Out[92]: abc 0 0 7 9 1 2 2 3 2 4 9 0 3 7 9 1 4 8 6 5 

突出显示其他系列中缺失的一个系列中的单元格的辅助函数:

 def highlight_missing(s1, s2, col_name): if s1.name == col_name: return ['' if x in s2.values else 'background-color: yellow' for x in s1] return [''] * len(s1) 

最后,我们可以创build一个新的Excel文件,突出显示缺less的值:

 df1.style.apply(highlight_missing, s2=df2['a'], col_name='a') \ .to_excel('d:/temp/new.xlsx', index=False, engine='openpyxl') 

结果:

在这里输入图像描述

这可能是由于write_blank()缺less一个额外的参数(请参阅这里的文档: http : //xlsxwriter.readthedocs.io/worksheet.html#write_blank )。

要解决这个问题,你可以改变

 worksheet.write_blank(j, 0, format) 

要么:

 worksheet.write_blank(j, 0, None, format) 

要么:

 worksheet.write(j, 0, format) 

希望有所帮助。