Python如何excel绘制背景单元格

时间:2017-08-06 13:47:56

标签: python excel

当条件满足时,必须为背景单元着色。

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)

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

2 个答案:

答案 0 :(得分:1)

这可能是由于write_blank()缺少一个额外的参数(请参阅此处的文档: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)

希望有所帮助。

答案 1 :(得分:1)

这是一个小型演示,它使用Pandas module

让我们首先生成两个示例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)

现在我们将它们解读/解析为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]:
   a  b  c
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]:
   a  b  c
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)

最后,我们可以使用突出显示的缺失值创建一个新的Excel文件:

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

结果:

enter image description here