6

スプレッドシート (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」ステートメントは機能しているようですが、特定の文字列を含むセルをフォーマットする方法を探しています。ありがとう!

4

1 に答える 1