c# - 我想打开一个excel文件并等待用户编辑并保存它

标签 c# .net excel process

我想打开一个excel文件并等待用户编辑并保存它,然后我使用数据。

我正在使用这段代码:

        string tempFileName = "test.xlsx";
        MemoryStream ms = DocumentFormat.OpenXml.Extensions.SpreadsheetReader.Create();
        DocumentFormat.OpenXml.Extensions.SpreadsheetWriter.StreamToFile(tempFileName, ms);

        var psi = new ProcessStartInfo(tempFileName);
        var p = new Process();
        p.StartInfo = psi;
        p.Start();

        p.WaitForExit();
        p.Close();
        // use the data

一切看起来都很好。
但问题是,如果在运行此 block 之前有一个打开的 excel 文件,我将在 p.WaitForExit();行是“无效的操作异常”。

我认为原因是:如果已经有一个名为“excel.exe”的进程,我的代码不会创建另一个进程来等待它退出,并且会合并进程或类似的东西。
我可以强制用户关闭所有打开的 excel 文档,然后运行此代码,或者我自己杀死 excel.exe 进程并从我的代码重新启动它。我不想使用这些解决方案。

请帮我找到出路!
非常感谢

最佳答案

当 Excel 打开电子表格时,Excel 会在与电子表格相同的文件夹中维护一个文件,并且只要用户打开 Excel 电子表格,该文件就存在。文件名(Excel 2007)与您的电子表格文件名相同,但前缀为“~$”,只需轮询该文件是否存在或使用电子表格文件夹上的 FileSystemWatcher 来查找它是否消失 - 这表明用户已停止使用电子表格并关闭它。

关于c# - 我想打开一个excel文件并等待用户编辑并保存它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865738/

相关文章:

c# - 如何将默认值初始化为 C#7 out 变量?

arrays - 将不连续的命名范围放入数组中,然后放入不同工作表中的行中

vba - 确定变量的完整类型

c# - 我可以在 C# 中覆盖已被 Locked() 的对象吗?

excel - 过滤列表时 ListRows.Add() 给出错误

c# - 如何检查 WPF 资源是否存在?

C#、Windows 窗体、顶部的消息框无法正常工作

c# - 从连接字符串创建数据库的最简单方法?

c# - 以毫秒为单位测量 .net 中的代码速度

c# - 使用 TypeConverter 进行依赖注入(inject)