web-dev-qa-db-ja.com

Python

私は、以下の問題に最もよく取り組む方法をブレインストーミングの最中です。どんな入力でも大歓迎です。

Excelシートの列の例:

_Column A  |  Column B  | Column C
Apple     |  Apple     |
Orange    |  Orange    |
Pear      |  Banana    |
_

列Aと列Bの項目が一致するか不一致かをExcelに知らせ、結果を列Cに表示します。列Cに入力する数式は=IF(A1=B1, "Match", "Mismatch")になります

Excelでは、数式を列Cの残りのセルにドラッグして数式をセルに適用すると、結果は次のようになります。

_Column A  |  Column B  | Column C
Apple     |  Apple     | Match
Orange    |  Orange    | Match
Pear      |  Banana    | Mismatch
_

pythonスクリプトを使用してこれを自動化するために、私は試しました:

_import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
Sheet = wb.get_sheet_by_name('Sheet1')
for cellObj in Sheet.columns[2]:
    cellObj.value = '=IF($A$1=$B$1, "Match", "Mismatch")
wb.save('test.xlsx')
_

これにより、列Cのすべてのセルに数式が書き込まれましたが、数式はセルA1とB1のみを参照しているため、列C =一致のすべてのセルになります。

_Column A  |  Column B  | Column C
Apple     |  Apple     | Match
Orange    |  Orange    | Match
Pear      |  Banana    | Match
_

これをどのように扱いますか?

10
spiderlily

おそらく、数式の作成を動的にして、Cの各行がAおよびBの対応する行から取得されるようにする必要があります。

for i, cellObj in enumerate(Sheet.columns[2], 1):
    cellObj.value = '=IF($A${0}=$B${0}, "Match", "Mismatch")'.format(i)
9
Moses Koledoye