none
Comportement etrange pendant lecture de fichier excel RRS feed

  • Question

  • 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:

    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" ...
    mercredi 22 novembre 2006 09:03

Réponses

  • En fait,j'ai trouvé ...
    Au cas où ca aiderait quelqu'un:

    J'ai changé
    Code :
    OleDbConnection excelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;HDR=YES;MaxScanRows=1;");

    par

    Code :
    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...)
    vendredi 24 novembre 2006 01:24
  • Bien, pour finir mon 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.
    vendredi 24 novembre 2006 01:32

Toutes les réponses

  • En fait,j'ai trouvé ...
    Au cas où ca aiderait quelqu'un:

    J'ai changé
    Code :
    OleDbConnection excelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;HDR=YES;MaxScanRows=1;");

    par

    Code :
    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...)
    vendredi 24 novembre 2006 01:24
  • Bien, pour finir mon 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.
    vendredi 24 novembre 2006 01:32
  •  kurisutofu A écrit:
    Bien, pour finir mon 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.


    Apparement, le maxscanrows ne sert a rien si imex=1.
    Voir ce liens (en anglais) pour plus de detais:
    dailydoseofexcel.com/archives/2004/06/03/external-data-mixed-data-types/


    vendredi 24 novembre 2006 02:50