在C#中使用OLEDB读取受密码保护的Excel文件

UJ.*_*UJ. 11 c# oledb excel

在我的c#应用程序中,我使用OLEDB连接字符串" Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.xls;Extended Properties=\"Excel 8.0;HDR=NO;ReadOnly=true;IMEX=1\""来读取Excel文件.为了读取受密码保护的文件,我尝试在连接字符串中添加密码字段但无法读取文件.我想知道有没有办法使用OLEDB读取密码保护的Excel文件,如果我事先知道它的密码.

Mr.*_*ith 5

以下是连接到Excel文件的不同方法,包括OLEDB.据此,您无法使用标准方法打开受密码保护的文件.您必须使用变通方法.

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

这是解决方案,虽然不在C#中,但您可以轻松地根据您的目的进行调整.

如果您自己不知道密码,另一种方法是在没有密码的情况下重写文件.您可以使用这个方便的项目并添加以下例程:

public void SaveFile()

        {
            this.excelWorkbook.SaveAs(
                this.excelWorkbook.FullName,
                vk_format,
                "",
                vk_write_res_password,
                vk_read_only,
                null,
                Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
                null,
                vk_add_to_mru,
                null,null,vk_local);
        }
Run Code Online (Sandbox Code Playgroud)

详细信息在这里.


小智 5

如果您使用查询来读取excel文件,那么某些工作表是否受到保护并不重要:它可以正常工作.

    private string ExcelConnection(string fileName)
    {
        return
            @"Provider=Microsoft.Jet.OLEDB.4.0;" +
            @"Data Source=" + fileName + ";" +
            @"Extended Properties=" + Convert.ToChar(34).ToString() +
            @"Excel 8.0" + Convert.ToChar(34).ToString() + ";";
    }

    private DataTable readExcel(string fileName, string sql)
    {
        OleDbConnection conn = new OleDbConnection(ExcelConnection(fileName));
        OleDbCommand cmd = new OleDbCommand(sql, conn);
        OleDbDataAdapter adp = new OleDbDataAdapter();
        adp.SelectCommand = cmd;
        DataTable dt = new DataTable();

        try
        {
            adp.FillSchema(dt, SchemaType.Source);
            adp.Fill(dt);
        }
        catch
        { 

        }
        return dt;
    }
Run Code Online (Sandbox Code Playgroud)