スプレッドシート (xls または xlsx) をフォーマットして、単語を含むセルまたは特定の文字列で終わるセルが、背景を特定の色で塗りつぶしてフォーマットされるようにしたいと考えています。
たとえば、セルに「deleted」という単語が含まれている場合は、黒で塗りつぶし、テキストを白で塗りつぶします。セルが「.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に値がコピーされますが、フォーマットは転送されないようです(input.xlsからのテスト値は、output.xlsを開いたときにフォーマットされなくなり、「ルールを管理」をエクセルで。
数値の「if」ステートメントは機能しているようですが、特定の文字列を含むセルをフォーマットする方法を探しています。ありがとう!