请阅读以下详细信息,因为我的方案不同。
我的项目需要从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)将区分这两个异常 像找不到文件, 密码不正确等
提前致谢....