繁体   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