2013-10-21 60 views
0

我有一個應用程序運行在服務器,並且必須寫一些東西來優秀的文件。當我想保存並關閉文件時,當其他機器和用戶打開文件時,我會遇到麻煩。 Excel會打開對話框以詢問文件名,但它在服務器上運行,沒有用戶關閉對話框。因此,當文件打開並且無法寫入文件時,應該跳過,而不需要GUI查詢文件名。如何在沒有GUI通知的情況下保存excel文件?

Workbook book = excel.Workbooks.Open(filename); 
Worksheet sheet = (Worksheet) book.Worksheets.get_Item(1); 
// write stuff in cells 
book.SaveAs(filename); 
book.Close(false); 

我怎樣才能使Excel嘗試保存文件,然後關閉是無論什麼?

(在我的應用程序沒有丟失的數據,它可以被寫入Excel文件後反正)


  • 文件存在→覆蓋
  • 文件打開→不保存,只需關閉

回答

0

如果我設置了一個文件,我必須更新購股權所有問題可能得到解決。因此,多個用戶可以同時更新文件:菜單→附加→...


這並不解決問題到100%,但聊勝於無:

private static void saveAndClose(Workbook book, string filename) 
{ 
    try 
    { 
     File.Delete(filename); 
    } 
    catch { } 
    if (!File.Exists(filename)) 
     book.SaveAs(filename); 
    book.Close(false); 
} 
1

看起來像這回答了這個問題,檢查是否該文件正在使用,然後再選擇保存或跳過。

Is there a way to check if a file is in use?

protected virtual bool IsFileLocked(FileInfo file) 
{ 
    FileStream stream = null; 

    try 
    { 
     stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None); 
    } 
    catch (IOException) 
    { 
     //the file is unavailable because it is: 
     //still being written to 
     //or being processed by another thread 
     //or does not exist (has already been processed) 
     return true; 
    } 
    finally 
    { 
     if (stream != null) 
      stream.Close(); 
    } 

    //file is not locked 
    return false; 
} 

要檢查文件是否存在,你可以使用

if (File.Exists(filename)){ 
    // if the file exists 
    book.Save(); 
} 
else{ 
//if the file doesnt exist 
    book.SaveAs(filename); 
} 
+0

這有助於如果該文件只是鎖定。覆蓋問題如何?在檢查和保存之間仍然有可能打開文件。有沒有辦法鎖定文件進行檢查和保存? – Bitterblue

+0

查看已更新的答案以檢查文件是否存在以及是保存還是保存。如果你的文件打開檢查是在打開文件和關閉文件之間,那麼在這段時間內沒有其他人可以打開/編輯/鎖定文件 –

+0

另外,這在保存時沒有幫助,因爲我用excel打開文件,並且已經通過本身。 **打開excel文件時可能會有用。 – Bitterblue

相關問題