Как изменить цвет фона ячейки excel с помощью библиотеки python xlwt?

Я использую xlwt библиотека Python для записи данных в Книгу Excel.
И теперь у меня есть некоторые проблемы с добавлением цвета фона в ячейку excel.

например у меня есть следующий цвет в RGB(10,20,30), что это самый простой способ сделать это? Есть ли способ установить этот цвет в ячейку?

Я нашел только этой сообщение, которое похоже на мою проблему.

4 ответов


в этом примере я показал, как установить цвет фона для ячеек, вы можете запустить его для результата:

from xlwt import Workbook
import xlwt
book = Workbook()
sheet1 = book.add_sheet('Sheet 1')
book.add_sheet('Sheet 2')
for i in range(0, 100):
    st = xlwt.easyxf('pattern: pattern solid;')
    st.pattern.pattern_fore_colour = i
    sheet1.write(i % 24, i / 24, 'Test text',st)
book.save('simple.xls')

У меня была эта проблема, и я сделал много поиска

наконец-то я нашел правильное и хорошее решение в : источник решения

он работает очень хорошо!

просто добавьте этот класс в свой проект и установите цвета excel:

class ColorMatcher(object):
"""
the source is in : http://www.archivum.info/python-excel@googlegroups.com/2012-09/00014/Re-(pyxl)-Re-Background-with-any-rgb-value.html

Prior to Excel 2007, Excel only had color
indexes, and that's all that xlwt supports.  Maybe this will help,
though.  It use a ColorMatcher that takes an RGB input and tries to
return the closest matching Excel color index:
"""

def __init__(self):
    self.reset()

def reset(self):
    self.unused_colors = set(self.xlwt_colors)
    # Never use black.
    self.unused_colors.discard((0, 0, 0))

#Culled from a table at http://www.mvps.org/dmcritchie/excel/colors.htm
xlwt_colors=[
    (0,0,0), (255,255,255), (255,0,0), (0,255,0), (0,0,255), (255,255,0),
    (255,0,255), (0,255,255), (0,0,0), (255,255,255), (255,0,0), (0,255,0),
    (0,0,255), (255,255,0), (255,0,255), (0,255,255), (128,0,0), (0,128,0),
    (0,0,128), (128,128,0), (128,0,128), (0,128,128), (192,192,192),
    (128,128,128), (153,153,255), (153,51,102), (255,255,204),
    (204,255,255), (102,0,102), (255,128,128), (0,102,204), (204,204,255),
    (0,0,128), (255,0,255), (255,255,0), (0,255,255), (128,0,128),
    (128,0,0), (0,128,128), (0,0,255), (0,204,255), (204,255,255),
    (204,255,204), (255,255,153), (153,204,255), (255,153,204),
    (204,153,255), (255,204,153), (51,102,255), (51,204,204), (153,204,0),
    (255,204,0), (255,153,0), (255,102,0), (102,102,153), (150,150,150),
    (0,51,102), (51,153,102), (0,51,0), (51,51,0), (153,51,0), (153,51,102),
    (51,51,153), (51,51,51)
]

@staticmethod
def color_distance(rgb1, rgb2):
    # Adapted from Colour metric by Thiadmer Riemersma,
    # http://www.compuphase.com/cmetric.htm
    rmean = (rgb1[0] + rgb2[0]) / 2
    r = rgb1[0] - rgb2[0]
    g = rgb1[1] - rgb2[1]
    b = rgb1[2] - rgb2[2]
    return (((512 + rmean) * r * r) / 256) + 4 * g * g\
    + (((767 - rmean) * b * b) / 256)

def match_color_index(self, color):
    """Takes an "R,G,B" string or wx.Color and returns a matching xlwt
    color.
    """
    if isinstance(color, int):
        return color
    if color:
        if isinstance(color, basestring):
            rgb = map(int, color.split(','))
        else:
            rgb = color.Get()
        distances = [self.color_distance(rgb, x) for x in self.xlwt_colors]
        result = distances.index(min(distances))
        self.unused_colors.discard(self.xlwt_colors[result])
        return result

def get_unused_color(self):
    """Returns an xlwt color index that has not been previously returned by
    this instance.  Attempts to maximize the distance between the color and
    all previously used colors.
    """
    if not self.unused_colors:
        # If we somehow run out of colors, reset the color matcher.
        self.reset()
    used_colors = [c for c in self.xlwt_colors if c not in
                                                  self.unused_colors]
    result_color = max(self.unused_colors,
        key=lambda c: min(self.color_distance(c, c2)
        for c2 in used_colors))
    result_index = self.xlwt_colors.index(result_color)
    self.unused_colors.discard(result_color)
    return result_index

источник этот код : http://www.archivum.info/python-excel@googlegroups.com/2012-09/00014/Re-%28pyxl%29-Re-Background-with-any-rgb-value.htmle


GREEN_TABLE_HEADER = easyxf(
                 'font: bold 1, name Tahoma, height 160;'
                 'align: vertical center, horizontal center, wrap on;'
                 'borders: left thin, right thin, top thin, bottom thin;'
                 'pattern: pattern solid, pattern_fore_colour green, pattern_back_colour green'
                 )
overviewSheet.row(rowCursor).write(col_0, 'Issue', GREEN_TABLE_HEADER)

Я рекомендую использовать модуль XlsxWriter, имеет удивительные возможности тоже http://xlsxwriter.readthedocs.io/