我想格式化電子表格(xls或xlsx),以便通過用特定顏色填充背景來格式化包含單詞或以特定字符串結尾的任何單元格。使用python從Excel有條件地格式化文本字符串
例如,如果單元格包含單詞「已刪除」,請將其填充黑色並將文本塗成白色。 如果單元格以'.pf'結尾,則將單元格塗成紅色。
我發現從幾年前類似的疑問,建議如下:
import xlrd
import xlutils.copy
inBook = xlrd.open_workbook('input.xls', formatting_info=True)
outBook = xlutils.copy.copy(inBook)
def _getOutCell(outSheet, colIndex, rowIndex):
""" HACK: Extract the internal xlwt cell representation. """
row = outSheet._Worksheet__rows.get(rowIndex)
if not row: return None
cell = row._Row__cells.get(colIndex)
return cell
def setOutCell(outSheet, col, row, value):
""" Change cell value without changing formatting. """
# HACK to retain cell style.
previousCell = _getOutCell(outSheet, col, row)
# END HACK, PART I
outSheet.write(row, col, value)
# HACK, PART II
if previousCell:
newCell = _getOutCell(outSheet, col, row)
if newCell:
newCell.xf_idx = previousCell.xf_idx
# END HACK
outSheet = outBook.get_sheet(0)
setOutCell(outSheet, 5, 5, 'Test')
outBook.save('output.xls')
雖然這確實從input.xls到output.xls的值複製,這似乎並沒有轉移格式(中當打開output.xls時,input.xls中的測試值不再被格式化,excel中的「管理規則」下也不存在條件格式規則。
數字值的「if」語句似乎可行,但同樣,I我正在尋找一種方法來格式化包含某些字符串的單元格。謝謝!
您是否嘗試在原地更改文件?您可以在腳本運行之前創建文件的備份。 – Alfe 2013-05-08 19:43:53
我不認爲就地編輯是可能的。從我所瞭解的xlutils只允許您複製和修改副本。如果win32com可以做到這一點,這將是一個很酷的嘗試方向,但我不知道這一點。 win32com也不是我的首選策略,因爲我希望這個腳本能夠在未安裝excel的機器上運行(linux)。 – user2363458 2013-05-09 15:00:46