如何在没有 GUI 通知的情况下保存 excel 文件?

Posted

技术标签:

【中文标题】如何在没有 GUI 通知的情况下保存 excel 文件?【英文标题】:How to save excel file without GUI notifications? 【发布时间】:2013-10-21 11:21:17 【问题描述】:

我有一个在服务器上运行的应用程序,它必须将一些内容写入 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文件)


文件存在 → 覆盖 文件打开 → 不保存,直接关闭

【问题讨论】:

【参考方案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);

【讨论】:

如果文件刚刚被锁定,这会有所帮助。覆盖问题如何?在检查和保存之间仍然有可能打开文件。有没有办法锁定文件以进行检查和保存? 查看更新的答案以检查文件是否存在并保存或另存为。如果您的文件打开检查是在您打开文件和关闭文件之间进行的,那么在那段时间里没有其他人可以打开/编辑/锁定它 这在保存时也无济于事,因为我用 excel 打开文件并且它已经自己锁定了它。 打开 excel 文件时它可能很有用。 如果您在正确的位置应用该功能,您会在尝试打开文件之前知道文件是否被锁定,然后在打开文件时将其锁定,以便您知道可以保存。 【参考方案2】:

如果我为我必须更新的一个文件设置共享选项,所有问题都可能得到解决。这样多个用户可以同时更新文件:菜单 → 额外 → ...


这并不能 100% 解决问题,但总比没有好:
private static void saveAndClose(Workbook book, string filename)

    try
    
        File.Delete(filename);
    
    catch  
    if (!File.Exists(filename))
        book.SaveAs(filename);
    book.Close(false);

【讨论】:

以上是关于如何在没有 GUI 通知的情况下保存 excel 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不通知用户的情况下将画布保存为 png 文件,

JProfiler 可以在没有 GUI 的情况下运行吗?

在没有为 Wpf 产品安装 MS Office 的情况下导出到 Excel

如何在没有 GUI 的情况下运行 makecert.exe?

如何在不提示保存的情况下使用 Windows“X”关闭 Excel 工作簿

如何在没有 GUI 的情况下运行 MATLAB 并获得图形结果?