2012-05-10 149 views

回答

17

在這個例子中,我已經展示瞭如何設置細胞背景顏色,你可以爲結果運行:

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

嗨Pooria,thnx的答案我試過你的代碼,它的工作很好,但問題是,你只使用預設的顏色,但我需要噸o只使用自定義的RGB,例如我的顏色範圍以RGB(1,255,255)開始並以RGB(255,255,255)結束,我需要將此範圍中的每種顏色添加到excel中,我試圖找到類似於方法addRGBColor(a ,b,c)當然,如果它存在xlwt api –

+0

嗨石川,我認爲這是不可能設置rgbcolor。因爲當我想在電子表格中選擇一種顏色作爲單元格的背景時,它僅顯示預設顏色。但我不確定這是不可能的。我沒有安裝excel,但我認爲這將與電子表格相同。 –

5

我有這個問題,我做了最後搜索

的很多我找到了一個合適的和好的解決方案: source of solution

它工作的很好!

只需添加這個類到你的項目,並設置Excel的顏色:

class ColorMatcher(object): 
""" 
the source is in : http://www.archivum.info/[email protected]/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/[email protected]/2012-09/00014/Re-%28pyxl%29-Re-Background-with-any-rgb-value.htmle

2
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) 
相關問題