最近工作中需要去判斷遠程服務器上的某個Excel文件是否被打開,如果被人打開,則等待,如果沒人打開使用,則去填寫數據進Excel文件。
開始想的很簡單,和其他語言一樣,比如C#,打開文件,如果報錯說明被占用,結果發現,Excel文件被其他人打開的情況下,python里面用可寫'w'的方式打開文件,實際上並沒有報錯,執行完成也沒任何錯誤,只是最后看Excel文件里面,發現實際要寫入的東西並沒被寫入。
然后在網上找了一些方法,比如用openpyxl,pywin32等等,發現都做不到真正去判斷Excel文件是否被其他人打開了。
后來想到一個解決方法:判斷是否有“~$”開頭的同名文件在同級目錄下存在:比如test.xlsx被打開后會存在~$test.xlsx文件,如果沒被打開則沒有該文件。
Excel文件(具體來說應該是MS office文件)每次被打開后其實是會創建一個隱藏的"~$"開頭的系統隱藏文件,比如打開test.xlsx后同級目錄下其實是會有~$test.xlsx文件:
因為~$test.xlsx是系統隱藏文件,如果要看到的話,需要顯示所有系統隱藏文件信息,方法如下:
- 點擊任一文件夾左上角的“文件”
- 點擊“選項”打開“文件夾選項”
- 點擊“查看”條目,勾選“顯示隱藏的文件、文件夾和驅動器”,然后去掉“隱藏受保護的操作系統文件(推薦)”的勾選
這樣就可以看到~$test.xlsx這個隱藏文件了。
知道了這個方法后,要去判斷Excel文件是否被打開就很容易了,只需要判斷~$test.xlsx文件是否存在即可,如果存在則認為test.xlsx文件被人打開,等待關閉,否則則認為該文件沒人打開,直接編輯即可。
對於本地和遠程服務器上的Excel文件否是被打開都可以用該方法。