2013-08-26 10 views
0

晚上好基於應用程序的編輯,的程序化和Excel文件

我有以下問題要解決:

我想添加到一個Excel文件了一堆的內容用戶生成.txt文件。這些文件全天生成並通過FTP發送到一個文件夾,該文件夾會不斷受到該程序的監視,以查看是否有新的添加。 如果程序在其中找到新的.txt文件,它將打開要編輯的Excel文件,添加信息並關閉Excel,保存更改。

與此同時,用戶必須打開這些Excel文件來檢查新的更新信息並相應地處理它。

程序的執行是有些這樣的:如果文件夾爲空或包含新.txt文件

  1. 無限循環檢查。
  2. 如果該文件夾不是空的(因此有信息要添加),它會檢查Excel文件是否打開。
  3. 如果Excel文件已關閉:
    1. 以編程方式打開它並向其中添加信息。
    2. 保存Excel文件並退出。
    3. .txt備份到另一個文件夾中,以防出現某種錯誤。
  4. 如果Excel文件被打開:
    1. 繼續檢查,直到它被關閉。

要檢查文件夾爲空或不使用:System.IO.Directory.EnumerateFileSystemEntries(path).Any()

要檢查如果Excel文件是打開我使用: System.IO.FileInfo(path)FileStream其中,一個try-catch子句中info.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None)

對於我用Microsoft.Office.Interop.Excel.Application[..].Workbook和Excel文件的打開,編輯和保存/關閉:在下面的模式打開。

當用戶在添加過程中打開(通過正常的Office應用程序)Excel文件時,主要問題出現。我希望找到某種類型的文件鎖定,以便用戶不能中斷編輯過程。

關於如何組合這兩種類型的打開/編輯Excel文件的任何想法?

非常感謝你的進步。

TL; DR:如何防止用戶在程序編輯Excel時以編程方式打開Excel文件?或者至少,打開另一個實例,這樣過程不會中斷?

PS:如果應該需要任何進一步的代碼,我會很樂意將它張貼:)

+1

我可能在這裏是錯的,但不會自動創建鎖定,當文件打開修改?像〜{DiscombobulatedFileNameHere} .xlsx,你可以暫時重新創建相同的文件,然後在你的進程結束時刪除它嗎? –

+1

我會在你的情況下做的是:1.程序將給定的Excel文件複製到臨時位置(不需要檢查它是否正在使用); 2.執行所有編輯。 3.編輯完成後,程序將打算刪除文件的原始版本(由用戶訪問);它會盡可能長時間地嘗試,直到找到沒有用戶訪問它的時刻;在刪除文件後,在那裏複製新的修改過的文件。通過這種方式,您可以確保用戶不會中斷版本過程。 – varocarbas

+0

您可以將文件設置爲「只讀」,但我期望(如果您使用Excel自動化添加數據)這應該已經由Excel處理。如果你不使用Excel來添加數據,你在用什麼?無論你使用什麼,也應該鎖定文件,因爲它需要打開它來寫入。 –

回答

0

我認爲你需要一個更好的解決方案。這聽起來像你正在最大限度地發揮Excel的功能。如果可能的話,你最好使用數據庫。

相關問題