如何在使用OLEDB的C#中确定excel工作簿是否受密码保护?

时间:2014-07-28 08:38:28

标签: c# asp.net excel oledb

我正在使用' OLEDB' 阅读excel文件。我需要一个规定,我可以确定我访问的excel文件是否受密码保护。请在下面找到我的代码:

private DataSet LoadExcel(string fileName, string tableName)
{
string path = fileName;
string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
System.Data.OleDb.OleDbConnection MyConnection;
System.Data.DataSet DtSet;
System.Data.OleDb.OleDbDataAdapter MyCommand;
MyConnection = new System.Data.OleDb.OleDbConnection(connStr);
MyConnection.Open();
DataTable dtExcelSchema;
dtExcelSchema = MyConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [" + SheetName + "]", MyConnection);
MyCommand.TableMappings.Add("Table", tableName);
DtSet = new System.Data.DataSet();
MyCommand.Fill(DtSet);
MyConnection.Close();
return DtSet;
}

我的代码在线分解" MyConnection.Open();"因为它在这里访问的excel文件受密码保护。如果我可以检查,我将绕过代码并显示用户友好的消息。如果有人对此有任何想法,请提供帮助。

先谢谢!!

3 个答案:

答案 0 :(得分:0)

来自http://www.connectionstrings.com/excel/

如果Excel工作簿受密码保护,即使通过连接字符串提供正确的密码,也无法打开它进行数据访问。如果您尝试,则会收到以下错误消息:"无法解密文件。"

OLEDB连接不适用于受密码保护的工作表。如果存在异常,您可以检测确切类型并捕获它。

其他方法是使用Office API并使用HasPassword属性。

Workbook book = '.....xyz''';
if (book.HasPassword) { ... }

答案 1 :(得分:0)

你试过那样的吗?

    try
    {
        MyConnection.Open();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }

答案 2 :(得分:0)

根据Aseem的第一个答复,“无法解密文件”。问题是Excel文件不在受信任位置的结果。我遇到了同样的问题,并通过将Excel文件移动到受信任位置或将Excel文件所在的文件夹添加到“受信任位置”中来解决了该问题。