前提
pywin32にてエクセル操作し業務の自動化を図っております
実現したいこと
対象のエクセルファイルを開き、書き込み処理を行っている間は
第三者が外部からエクセルファイルを開いても書き込みを禁止したいです
発生している問題・エラーメッセージ
書き込み処理を行っている間に外部から同じエクセルファイルを開くと以下のエラーが発生します
pywintypes.com_error:
該当のソースコード
import win32com.client from tkinter import messagebox import pythoncom import sys import time #第三者がエクセルファイルを開いているかを確認 try: with open('エクセルファイルパス', 'a') as f: pass except PermissionError: messagebox.showerror('エラー','他の人がエクセルファイルを開いています') sys.exit() #Excelのインスタンス取得 pythoncom.CoInitialize() excel = win32com.client.Dispatch("Excel.Application") excel.Visible = False # エクセルファイルを開き指定のシートを開く try: wb = excel.Workbooks.Open('エクセルファイルパス', ReadOnly = True) ws = wb.Worksheets('管理台帳') except Exception: messagebox.showerror('エラー','管理台帳OPENエラー') pythoncom.CoInitialize() sys.exit() #メイン処理(書き込み処理) time.sleep(10) # エクセルファイルセーブ処理 wb.Save() wb.Close() pythoncom.CoInitialize()
試したこと
以下2つを試しましたが、外部からエクセルファイルを開いたら上記のエラーが発生するので書き込み処理が行えません
・Protect()メソッドを使用し、ブックやシートを保護
・エクセルファイルを開く際にパスワードを追加
try-exceptで上記エラーをキャッチし、書き込み処理をキャンセルしてエクセルファイルを閉じるという処理をすることも考えました。しかしメンターからは「理想的な書き方ではない」と指摘を受けたので、排他ロックや外部からの書き込みを禁止することで解決したいです
補足情報(FW/ツールのバージョンなど)
Visual Studio Code 1.66.0
python 3.10
windows 10

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/05 00:49
2022/04/05 01:22
2022/04/05 01:26
2022/04/05 04:57
2022/04/05 05:29