2024年のうちにやっておきたいこと、ここで宣言しませんか?

pythonを学習し始めたのですが、その中でどうしても分からない部分があり質問させていただきます。

・やりたい事
Excelファイルから値を検索し、セル番地を取得。
取得したセルの下に値を記載。

下記サイトを参考に記載したいセル番地の取得までは出来ているのですが
実際に書き込みを実施する部分でエラーが発生します。
 ※参考サイト https://ramunememo.hatenablog.com/entry/2021/09/ …
参考サイトの「シート全体を検索」を使用してlistに希望のセル番地が取得できていることは確認できています。

・エラー部分
for itm in result:
ws[itm].value = 値

エラー内容が「ValueError: ['I6'] is not a valid coordinate or range」なので
ws[itm]のitmがきちんと取得できていないと考え、
ws[str(itm)]
に変更しましたが[]や''までも文字列として入ってしまうためエラー。
replaceを使用して[]や''を消そうと
ws[itm.replace('[', '').replace(']', '').replace("'", '')]
としましたが、「AttributeError: 'list' object has no attribute 'replace'」とエラーが出ます。

このような場合、どのようにすれば思うような動きをさせることが出来るのでしょうか。
初歩的な内容で申し訳ありませんが、ご教授お願い致します。

環境:
Python 3.10.7 64bit
Excel2021

A 回答 (1件)

こちらで、上記参考サイトのスクリプトを実行してみましたが、


正常に動作します。
def main より前は、参考サイトのままです。
def main 以降は以下のようにしました。
(本サイトにアップするとインデントがずれます)
画像の右上側が実行前のシート、右下側が実行後のシートの内容です。

def main():
filename = 'Book1.xlsx'
wb = openpyxl.load_workbook(filename)
ws = wb['Sheet3']
result = search_entire_sheet(ws, '山田')
print(result)
for itm in result:
ws[itm] = "XYZ"
wb.save(filename)
if __name__ == '__main__':
main()

実行結果:
['C7', 'D9']
「Python openpyxlを使用した」の回答画像1
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報