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

Documents Java Discussion :

[POI]copier/coller fichier Excel


Sujet :

Documents Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 52
    Points : 22
    Points
    22
    Par défaut [POI]copier/coller fichier Excel
    Serait-il possible de faire un copier coller de plusieurs cellules d'un fichier excel existant de A1 à C50(A1:C50), vers un fichier excel à créer. car actuellement je recupere les cellules une à une et les colle dans le nouveau fichier, et j'ai des problemes de mémoire quand les fichier Excel sont trop gros.

    merci de votre aide

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 814
    Points : 7 642
    Points
    7 642
    Par défaut Re: [POI]copier/coller fichier Excel
    Salut,

    Citation Envoyé par yas2006
    Serait-il possible de faire un copier coller de plusieurs cellules d'un fichier excel existant de A1 à C50(A1:C50), vers un fichier excel à créer. car actuellement je recupere les cellules une à une et les colle dans le nouveau fichier, et j'ai des problemes de mémoire quand les fichier Excel sont trop gros.
    Et tu crois que tu auras moins de problème de mémoire en passant par toute la zone??? Ca serait étrange...
    Si tu récupères les cellules une à une, tu ne stockes qu'une valeur en mémoire (donc déjà, je ne comprends pas trop comment tu peux avoir un problème...)
    Alors que si tu copies toute une zone, il va falloir stocker toute la zone en mémoire, et donc ça prendra plus de place...

    Tu n'aurais pas un soucis dans ton code de copie? On pourrait le voir?
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 52
    Points : 22
    Points
    22
    Par défaut
    Je pense que le soucis est la lecture du fichier en entrée qui fait environ 30 Mo. Voici le code de traitement de mon fichier :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    String repertoire = null;
    String inFilename = null;
    String outFilename = null;
    String lecture = null;
    POIFSFileSystem fs = null;
    FileOutputStream file = null;
    FileOutputStream fileOut = null;
    HSSFWorkbook workbook = null;
    HSSFSheet sheet = null;
    HSSFSheet newSheet = null;
     
    repertoire = "C:\\datas\\";
     
    inFilename = "test.xls;
    outFilename = repertoire + "Donnees_param_" + 
    		inFilename;
     
    fs = new POIFSFileSystem(new FileInputStream(new File(inFilename)));
    fileOut = new FileOutputStream(new File(outFilename));
    workbook = new HSSFWorkbook(fs);
    sheet = workbook.getSheetAt(0);
     
    workbook = new HSSFWorkbook();
    newSheet = workbook.createSheet("Feuille1");
    int nbRow = sheet.getPhysicalNumberOfRows();
     
    for(int i = 0 ; i < nbRow ; i++) {
    HSSFRow newRow = newSheet.createRow(i);
    HSSFRow row = sheet.getRow(i);
    // cell
    for(short j = (short) 0 ; j < (short) 64 ; j++) {
        HSSFCell cel = row.getCell(j);
       // je ne récupere que la colonne 0
        if ( j < (short) 1){					
            HSSFCell newCell = newRow.createCell(j);
            if ( !cel.equals(null) ) {
                switch(cel.getCellType()) {
                    case HSSFCell.CELL_TYPE_FORMULA:
                        newCell.setCellType(HSSFCell.CELL_TYPE_STRING);
                        newCell.setCellValue(cel.getStringCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_NUMERIC:
                        newCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                        newCell.setCellValue(cel.getNumericCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_STRING:
                        newCell.setCellType(HSSFCell.CELL_TYPE_STRING);
                        newCell.setCellValue(cel.getStringCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_BOOLEAN:
                        newCell.setCellType(HSSFCell.CELL_TYPE_BOOLEAN);
                        newCell.setCellValue(cel.getBooleanCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_BLANK:
                        newCell.setCellType(HSSFCell.CELL_TYPE_BLANK);
                        newCell.setCellValue("");
                        break;
                }//switch
            }
        }
        // puis je ne recupere ici que les colonnes de 11 à 62
        else if ( j > (short) 10 && j < (short) 63) {
            HSSFCell newCell = newRow.createCell((short) (j-10));
            if ( !cel.equals(null) ) {
                switch(cel.getCellType()) {
                    case HSSFCell.CELL_TYPE_FORMULA:
                        newCell.setCellType(HSSFCell.CELL_TYPE_STRING);
                        newCell.setCellValue(cel.getStringCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_NUMERIC:
                        newCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                        newCell.setCellValue(cel.getNumericCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_STRING:
                        newCell.setCellType(HSSFCell.CELL_TYPE_STRING);
                        newCell.setCellValue(cel.getStringCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_BOOLEAN:
                        newCell.setCellType(HSSFCell.CELL_TYPE_BOOLEAN);
                        newCell.setCellValue(cel.getBooleanCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_BLANK:
                        newCell.setCellType(HSSFCell.CELL_TYPE_BLANK);
                        newCell.setCellValue("");
                        break;
                }//switch
            }
        }					
    }
     
    workbook.write(fileOut);
    fileOut.close();
    Si t'as une idée, elle est la bienvenue, car là je séche vraiment.

  4. #4
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 814
    Points : 7 642
    Points
    7 642
    Par défaut
    Citation Envoyé par yas2006
    Je pense que le soucis est la lecture du fichier en entrée qui fait environ 30 Mo.
    Euh... ouais, alors, pour te rassurer (un peu...), au boulot Excel a déjà du mal à faire tourner mes fichiers de 30 Mo...

    Citation Envoyé par yas2006
    Si t'as une idée, elle est la bienvenue, car là je séche vraiment.
    Peut-être en essayant de charger les lignes dont tu as besoin dans un tableau, et fermer le fichier input. Ca devrait faire gagner un peu de mémoire, Excel me semble assez gourmand sur la mémoire. En plus, vu que tu ne charges qu'une seule page...
    Ensuite tu travailles sur ton tableau...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

Discussions similaires

  1. Copier/Coller entre Excel et un dataGridView
    Par vladvad dans le forum Windows Forms
    Réponses: 8
    Dernier message: 29/11/2017, 00h34
  2. [XL-2007] Copier coller fichier txt dans Excel
    Par jerdel dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/03/2012, 15h44
  3. Copier - Coller de Excel vers un datagridview
    Par sylchar dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 28/03/2007, 10h26
  4. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08
  5. Copier coller Fichier windows
    Par KPitN dans le forum Windows
    Réponses: 8
    Dernier message: 20/04/2004, 17h32

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