IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[C#][2.0]Comportement etrange pendant lecture excel


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut [C#][2.0]Comportement etrange pendant lecture excel
    Bonjour,
    J'ai une page ASP.net qui lie un fichier excel pour stoquer les valeurs dans une base de données.
    Mais cela marche "bizarrement", par exemple avec ces données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    colonne1         colonne2         colonne3
    12                     1.5                  na
    45                      75                  na 
    na                      30                 14.75
    28.6                   na                  13
    Je li le fichier et stoque temporairement dans un dataset mais dans ce cas là par exemple, les valeurs numeriques (type Double) de la colonne 3 et les valeur "na" (type String) des colones 1 et 2 ne sont pas pris en compte (valeur Null)...
    Il semble que le dataadapter definit le type des colonnes grace aux 2 premieres lignes et ensuite, les String et les Double ne sont pas compatible...

    Quelqu'un saurait comment je peux faire pour eviter çà? Si j'ai null a la place de "na", c'est pas grave mais je veux eviter de voir mes valeur passées a Null si les premieres valeurs d'une colonnes sont "na" ...

  2. #2
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 29
    Par défaut
    ton code nous aiderais peut être à t'aider

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Désolé, le voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    OleDbConnection excelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;");
     
            OleDbCommand dbCommand;
            excelConn.Open();
            if (SheetName == "null" || SheetName == null)
            {
                DataTable dbSchema = excelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                if (dbSchema == null || dbSchema.Rows.Count < 1)
                    throw new Exception("Error: Could not determine the name of the first worksheet.");
                String firstSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString();
                if (Range != null && Range != "null")
                {
                    firstSheetName = firstSheetName .Insert(firstSheetName.IndexOf("$")+1,Range);
                    firstSheetName = firstSheetName.Replace("'", "");
                }
                dbCommand = new OleDbCommand("SELECT * FROM [" + firstSheetName + "]", excelConn);
            }
            else
            {
                if (Range != null && Range != "null")
                {
                    dbCommand = new OleDbCommand("SELECT * FROM [" + SheetName + "$"+Range+"]", excelConn);
                }
                else
                    dbCommand = new OleDbCommand("SELECT * FROM [" + SheetName + "$]", excelConn);
            }
            OleDbDataAdapter oledbDA = new OleDbDataAdapter(dbCommand);
            DataSet DS = new DataSet();     
     
     
            try
            {           
     
                oledbDA.Fill(DS);            
                excelConn.Close();
                DataTable DT=DS.Tables["Table"] ;           
     
            }
            catch 
            {             
                excelConn.Close();          
            }
    Ce code marche mais avec le probleme dont j'ai parlé.

    Si je change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleDbConnection excelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;");
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OleDbConnection excelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;HDR=YES;MaxScanRows=1;");
    ca ne marche plus et me dit "Could not find installable ISAM" ...

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    En fait,j'ai trouvé ...

    J'ai changé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleDbConnection excelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;HDR=YES;MaxScanRows=1;");
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleDbConnection excelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=\"Excel 8.0;HDR=YES;MaxScanRows=1;IMEX=1\"");
    Je connaissais pas la propriété IMEX (je sais d'ailleurs toujours pas ce que c'est sais ...) et il faut rejouter \" pour encadrer les propriétés (ou (char)34)

    Par contre, j'ai lu que si on met maxscanrows a 0, c'est pas bon car il lit toute la colonne et definit le type en fonction du type majoritaire... quelqu'un aurait une astuce pour definir un type de colonne sans faire bugger dès que le type de la valeur ne correspond pas?
    (Par exemple, si je dis que le type est Double, si un string est entrée, qu'il passe a null plutot que de bugger...)

  5. #5
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Bien, pour finir mon quasi- monologue , ca marche.

    En fait, la page microsoft où j'avais lu que maxscanrows a 0 ne marche pas comme on veut se trompe...
    Avec maxscanrows a 0, tout les type entrés sont acceptés.

    Merci a MichMich29 d'avoir eu l'intention de m'aider! (désolé pour avoir tardé a poster le code d'ailleurs ... j'habite au Japon donc le décalage horaire plus un jour férié n'aide pas ^_^)

  6. #6
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Citation Envoyé par kurisutofu
    Bien, pour finir mon quasi- monologue , ca marche.

    En fait, la page microsoft où j'avais lu que maxscanrows a 0 ne marche pas comme on veut se trompe...
    Avec maxscanrows a 0, tout les type entrés sont acceptés.

    Merci a MichMich29 d'avoir eu l'intention de m'aider! (désolé pour avoir tardé a poster le code d'ailleurs ... j'habite au Japon donc le décalage horaire plus un jour férié n'aide pas ^_^)
    Apparement, maxscanrows ne sert a rien quand imex=1.
    Voir ce liens (en anglais) pour plus de details:
    external-data-mixed-data-types

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. FindCLose Comportement etrange
    Par Aos dans le forum Langage
    Réponses: 6
    Dernier message: 24/01/2006, 14h20
  2. Erreure pendant macro Excel
    Par nemesys971 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/01/2006, 12h11
  3. Réponses: 16
    Dernier message: 03/11/2005, 19h33
  4. [LG]repeat/until comportement etrange
    Par scifire dans le forum Langage
    Réponses: 11
    Dernier message: 25/03/2005, 21h56
  5. [langage] Comportement étrange d'une variable
    Par Spaz dans le forum Langage
    Réponses: 6
    Dernier message: 23/04/2004, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo