簡體   English   中英

如何在沒有GUI通知的情況下保存Excel文件?

[英]How to save excel file without GUI notifications?

我有一個在服務器上運行的應用程序,必須將一些內容寫入excel文件。 當我想保存和關閉文件時,其他計算機和用戶打開文件時會遇到麻煩。 Excel將打開對話框詢問文件名,但該文件正在服務器上運行,沒有用戶可以關閉對話框。 因此,當文件打開且無法寫入時,應在沒有GUI要求文件名的情況下跳過。

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文件中)


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

看起來像這樣回答了問題,請在選擇保存或跳過之前檢查文件是否正在使用中。

有沒有辦法檢查文件是否正在使用?

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);
}

如果我為必須更新的一個文件設置了共享選項,則可能會解決所有問題。 這樣多個用戶可以同時更新文件:菜單→其他→...


這不能100%解決問題,但總比沒有好:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM