如何通过c#打开excel文件,文件可能受密码保护,也可能不受密码保护?

时间:2017-11-13 08:44:06

标签: c# excel

请阅读以下详细信息,因为我的方案不同。

我的项目需要从excel文件读取数据并通过c#将数据写入excel文件的小功能。

我为用户提供了两个选项 1.创建Excel文件 2.打开现有的Excel文件

如果用户选择选项1 那么它会询问用户是否要通过设置密码来保护文件

1.set密码
2.我不想设置密码

以这种方式我的文件将被保存。(请考虑文件路径已经给出)

现在如果用户想要打开文件,那么我需要检查文件是否受密码保护。

如果文件受密码保护,我想要求通过,否则不是

问题是 - 我想检查文件是否受密码保护。 我尝试使用' HasPassword' WorkBook的属性

if(WorkBookObj.HasPassword)
{
//ask for pass and call method with pass
 ExcelFileObj.OpenExcelFile(UserEnteredPath,userEnteredPass);
}
else 
{
//no need to ask for pass
ExcelFileObj.OpenExcelFile(UserEnteredPath);
}

我做了上面的代码

OpenExcel文件方法就像这样

public void OpenExcelFile(FilePath,string password)
        {
            try
            {
                XlWorkbook = XlApp.Workbooks.Open(FilePath, Password: password);
            }
            catch (Exception e)
            {

                throw new Exception(e.Message);

            }
        }

同样聪明我也有另一个重载方法OpenExcelFile(filePath)

我发现HasPassword仅在文件打开时有效。但是在打开文件之前我想要它,因为我想根据HasPassword属性的值调用不同的方法。请为此提出一些解决方案。

我尝试了什么 - 我试图通过捕获此方法抛出的异常来解决这个问题

 XlWorkbook = XlApp.Workbooks.Open(FilePath, Password: password);

首先我调用了重载的Open(密码)方法,如果文件受密码保护,它将通过异常,我可以做我的东西(即要求用户传递) 但这里的问题是

XlWorkbook = XlApp.Workbooks.Open(FilePath, Password: password);

这种方法虽然可以有不同的例外 像找不到文件, 密码不正确等 这些都是" System.Runtime.InteropServices.COMException" 所以我不能使用多个catch语句来捕获不同类型的异常 " System.Io.FileNotFoundException",....等 如果我尝试这样做,它会说异常类必须从System.Exception继承。 所以请为此提出任何解决方案。

或是否有任何独特的东西(如ErrorCode..etc)将区分这两个异常 像找不到文件, 密码不正确等

提前致谢....

0 个答案:

没有答案