我使用xlwt Python庫在excel工作簿中寫入數據。
現在我有一些向excel單元格添加背景色的問題。如何用python xlwt庫更改excel單元格的背景顏色?
例如,我有RGB(10,20,30)中的下一個顏色,最簡單的方法是什麼? 有沒有什麼辦法可以將這種顏色設置爲單元格?
我發現只有this的帖子,這與我的問題類似。
我使用xlwt Python庫在excel工作簿中寫入數據。
現在我有一些向excel單元格添加背景色的問題。如何用python xlwt庫更改excel單元格的背景顏色?
例如,我有RGB(10,20,30)中的下一個顏色,最簡單的方法是什麼? 有沒有什麼辦法可以將這種顏色設置爲單元格?
我發現只有this的帖子,這與我的問題類似。
在這個例子中,我已經展示瞭如何設置細胞背景顏色,你可以爲結果運行:
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')
我有這個問題,我做了最後搜索
的很多我找到了一個合適的和好的解決方案: 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
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/
嗨Pooria,thnx的答案我試過你的代碼,它的工作很好,但問題是,你只使用預設的顏色,但我需要噸o只使用自定義的RGB,例如我的顏色範圍以RGB(1,255,255)開始並以RGB(255,255,255)結束,我需要將此範圍中的每種顏色添加到excel中,我試圖找到類似於方法addRGBColor(a ,b,c)當然,如果它存在xlwt api –
嗨石川,我認爲這是不可能設置rgbcolor。因爲當我想在電子表格中選擇一種顏色作爲單元格的背景時,它僅顯示預設顏色。但我不確定這是不可能的。我沒有安裝excel,但我認爲這將與電子表格相同。 –