LoginSignup
0
0

More than 1 year has passed since last update.

openpyxlでiter_rows()を使ったワークシート行のイテレーションを中断するとファイル削除できなくなる

Posted at

openpyxlでエクセルファイルを開いたのちに削除しようとしてもプロセスがファイルをブロックしていて削除できなかった。

Windows環境

  • Windows8.1
  • Python 3.10.7
  • openpyxl 3.0.10
import os
from openpyxl import load_workbook

FNAME = 'sample.xlsx'
# EXCELファイルをオープン
wb = load_workbook ( FNAME, read_only=True )
sheet = wb.active
# 行をイテレーション
for row in sheet.iter_rows() :
    # なにか処理
    # イテレーションを中断
    break
# Workbookオブジェクトを閉じる
wb.close()
# EXCELファイルを削除  --> Win32エラー
os.remove ( FNAME )

根本的な対策はみつからなかった。
イテレーションを中断しないように変更する。

import os
from openpyxl import load_workbook

FNAME = 'sample.xlsx'
# EXCELファイルをオープン
wb = load_workbook ( FNAME, read_only=True )
sheet = wb.active
# 行をイテレーション
is_terminated = False
for row in sheet.iter_rows() :
    # これ以上処理がひつようないならば空回しする
    if is_terminated is True: continue 
    # なにか処理
    # イテレーションを中断したい
    is_terminated = True
# Workbookオブジェクトを閉じる
wb.close()
# EXCELファイルを削除 --> 成功
os.remove ( FNAME )
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0