使用Process.Start打开受密码保护的Excel文件 - 不要等待密码

时间:2018-04-09 15:48:18

标签: c# .net excel

在我的应用程序中,我需要打开一个受密码保护的excel文件,但我不想输入此密码(这将由用户执行)。
我用Process.Start(path)方法打开它。
问题是我的应用程序正在打开此文件并等待用户输入密码。因此,在用户不输入密码之前,我的应用程序正在等待 我希望我的应用继续下一个代码行,不要等待用户输入密码 有没有人有类似的问题,知道如何解决它?

编辑:
我的代码:

if (File.Exists(_path))
{               
     //Start the program from _path
     Process program = Process.Start(_path);

}
else
{
     throw new Exception("File does not exist at path: " + _path);
}

编辑:
解决方案:
解决方案是使用参数启动Excel应用程序,该参数是所选Excel文件的路径。

private void StartProgram(string _path)
{
    //Check if file exist
    if (File.Exists(_path))
    {
        ProcessStartInfo processInfo = new ProcessStartInfo();

        //Check if file is an Excel sheet
        if (FileIsExcelSheet(_path) && ExcelIsInstalled())
        {
            processInfo.FileName = "Excel";
            processInfo.Arguments = _path;

            Process program = Process.Start(processInfo);
        }
        else
        {
            //Start the program from _path
            Process program = Process.Start(_path);
        }
   }
   else
   {
        throw new Exception("File does not exist at path: " + _path);
   }
}

2 个答案:

答案 0 :(得分:0)

如果您使用OLE自动化打开文件(即通过它的COM自动化模型驱动Excel,而不是仅仅要求Windows Shell启动它),那么您可以通过在{{1中提供密码来解决此问题。调用。如果您没有正确的密码,那么呼叫将失败,但至少它不会阻止。

当然,这是一个很多更难以打开文件的方式......非常多的情况是“你有一个问题,你解决了它,现在你有99个”。

答案 1 :(得分:0)

您需要将文件名用作Excel,将Argument用作xlsx路径:

    Process process = Process.Start(new ProcessStartInfo{
        FileName=@"C:\Program Files (x86)\Microsoft Office\Office14\Excel.exe",
        Arguments=_path
    });

我想你可以从另一个线程启动它,但是如果你的应用程序习惯打开这些文件,那么你可能不想浪费所有的线程。