我想打开一个excel文件,等待用户编辑并保存

我想打开一个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 

一切都看起来不错 但问题是,如果有一个打开的Excel文件运行此块之前,我会有一个错误p.WaitForExit(); 这是“无效操作exception”的行。

我认为原因是:如果已经有一个名为“excel.exe”的进程,我的代码将不会创build另一个等待它退出,并将合并进程或类似的东西。 我可以强制用户closures所有打开的Excel文档,然后运行这个代码,或者我自己杀了excel.exe进程,并从我的代码再次启动它。 我不想使用这些解决scheme。

请帮我找出路! 非常感谢

Excel打开电子表格时,Excel将文件保存在与电子表格相同的文件夹中,只要用户打开Excel电子表格,该文件就会存在。 文件名称(Excel 2007)与电子表格文件名称相同,但以“〜$”为前缀,只是轮询该文件存在,或者在电子表格文件夹中使用FileSystemWatcher来查找它消失 – 这表示用户已经停止使用电子表格并closures它。

显然这个时候来帮助OP的时机太晚了,但希望这能帮助未来的某个人。 在我的情况下,使用接受的答案(与文件名中的“〜$”)似乎有点问题,如果function。 或者,您只需将ProcessStartInfo.FileName设置为“EXCEL.EXE”并将其作为参数提供给文件path即可。

 var psi = new ProcessStartInfo() psi.FileName = "EXCEL.EXE"; psi.Arguments = tempFileName; var p = new Process(); p.StartInfo = psi; p.Start(); p.WaitForExit(); p.Close(); 

当Excel的实例已经打开时,对我来说工作得很好(至less在Excel 2013中)。根据您的Excel版本,您的体验可能会有所不同。