11
votes

Lire le fichier Excel protégé par mot de passe à l'aide d'OLEDB en C #

dans ma application C # J'utilise la chaîne de connexion OLEDB " fournisseur = microsoft.jet.oledb.4.0; source de données = C: \ test.xls; Propriétés étendues = \" Excel 8.0; HDR = Non; Rishny = vrai; imex = 1 \ "" Pour lire des fichiers Excel. Afin de lire un fichier protégé par mot de passe, j'ai essayé d'ajouter un champ de mot de passe dans la chaîne de connexion mais n'a pas pu lire le fichier. Je veux savoir s'il y a un moyen de lire des fichiers Excel protégés par mot de passe à l'aide de OLEDB si je connais son mot de passe à l'avance.


0 commentaires

4 Réponses :


5
votes

Voici Différentes façons de se connecter à un fichier Excel , y compris OLDEB. Selon cela, vous ne pouvez pas ouvrir de fichier protégé par mot de passe avec des méthodes standard. Vous devez utiliser une solution de contournement.

Si le classeur Excel est protégé par Un mot de passe, vous ne pouvez pas l'ouvrir pour accès aux données, même en fournissant le Mot de passe correct avec votre connexion chaîne de caractères. Si vous essayez, vous recevez le Message d'erreur suivant: "Impossible de Decrypt File.

C'est la solution , bien que non pas en C #, mais vous pouvez facilement l'adapter à vos fonctions.

Si vous ne connaissez pas vous-même le mot de passe, une alternative consiste à ré-écrire le fichier sans mot de passe. Vous pouvez utiliser ce projet pratique et ajoutez la routine suivante à celle-ci: xxx

Détail complet ici .


0 commentaires

2
votes

Vous pouvez utiliser OOXMLCrypto Stream pour accéder aux fichiers chiffrés Office 2007. Open Source, comprend ExcelPackage modifié.

code d'échantillon: xxx


1 commentaires

Si le fichier est crypté, est-ce applicable?



5
votes

Si vous utilisez une requête pour lire le fichier Excel, peu importe si certaines des feuilles sont protégées: cela fonctionne de toute façon.

    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;
    }


0 commentaires

3
votes

Après que je cherchais encore et encore, j'ai finalement trouvé 2 choses.
1.Utilisant OLEDB, il ne peut pas lire le fichier Excel qui est protégé par mot de passe.
2.Evue bien que INTEROP puisse lire le fichier Excel, que ce soit que le mot de passe protégé ou non, sa performance n'est pas aussi bonne que OLEDB.

Donc, je crée ci-dessous le code en combinant
1. OLEDB qui a une très belle performance et
2. Interop pouvant lire tous les fichiers Excel.
xxx

Enfin, si vous souhaitez supprimer la ligne vide lors de la récupération des données d'Excel, veuillez vérifier Ce lien et ci-dessous code xxx


0 commentaires