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

SDK Discussion :

SDK SAP BO 4.1 export CSV différent du rapport


Sujet :

SDK

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 21
    Points
    21
    Par défaut SDK SAP BO 4.1 export CSV différent du rapport
    Bonjour,

    J'ai un problème avec l'export CSV d'un rapport.
    J'ai une appli qui s'occupe de rafraîchir des rapports puis de les re sauvegarder dans le référentiel.
    Jusqu'ici tout va bien. Sauf que l'appli permet aussi d'exporter les dit rapports en XLSX ou CSV.

    En export CSV, le rapport se retrouve être différent du rapport sous RICH.
    Dans le fournisseur de donnée du rapport, il y a plus de champ que dans le rapport affiché (nous n'avons pas besoin que tous les champs soient affichés).

    Or dans l'export CSV avec mon appli, tous les champ du fournisseur de données sont affichés et je ne comprend pas pourquoi !?

    Es-ce que quelqu'un aurait une explication ?

    Voici le code de l'export (widoc est la variable représentant le rapport ouvert par la méthode OpenDocument) :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CSVView csvView = null;
    csvView = (CSVView) widoc.getDataProviders().getView(OutputFormatType.CSV);
     
    File f = new File(pathRpp + nomRpp + "." + export);
    FileWriter fw;
    try {
       fw = new FileWriter(f);
       fw.write(csvView.getContent());
       fw.close();
    } catch (IOException e) {
       //e.printStackTrace();
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Mai 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte Décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 363
    Points : 521
    Points
    521
    Par défaut
    L'export CSV sert à exporter les données du rapport, il permet seulement d'extraire les données des fournisseurs de données sans passer par le rendu graphique, donc ne tient pas compte du fait que les colonnes soit affichées ou non et ne permet pas non plus d'exporter les variables calculées dans le rapport.

    Pour extraire quelque chose qui ressemble au rapport, il faut extraire en Excel

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Oui, c'est ce que j'ai cru comprendre.
    Je suis donc obligé de passer par un export excel puis de convertir le fichier xlsx en csv.

    J'ai opéré en ce sens, mais j'ai un problème de mémoire avec la conversion... il me met "java.lang.OutOfMemory : Java heap space" !
    J'ai fais des recherches sur cette erreur et j'ai trouvé le moyen d'allouer plus de mémoire à la JVM (option : -Xms64m -Xmx1024m).
    Mais le programme en demande toujours plus.

    Le fichier excel de base est d'environ 17Mo .... et le conversion plante à chaque fois !
    Je ne trouve pas de solution !!!

    Si quelqu'un connait un moyen de convertir de l'excel en csv, je suis preneur !!??

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Mai 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte Décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 363
    Points : 521
    Points
    521
    Par défaut
    Ton problème est probablement lié au nombre de cellules à traiter, si ton code instancie chaque cellule, cela alloue de la mémoire pour chaque cellule de ta feuille Excel, qui en a un nombre assez impressionnant...

    Limite ton parcours du fichier Excel (en limitant le nombre de lignes et de colonnes parcourues) pour limiter la consommation de ton programme.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    Donc mon problème viendrait plus de la lecture que de l'écriture selon toi ??

    Voici mon code (enfin la class que j'ai trouvé sur le net ^^) :
    Code Java : 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
    StringBuffer cellValue = new StringBuffer();
    		try {
    			//FileOutputStream fos = new FileOutputStream(outputFile);
    			FileWriter fw = new FileWriter(outputFile);
    			BufferedWriter fos = new BufferedWriter(fw);
     
    			// Get the workbook instance for XLSX file
    			XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(inputFile));
     
    			// Get first sheet from the workbook
    			XSSFSheet sheet = wb.getSheetAt(0);
     
    			Row row;
    			Cell cell;
     
    			// Iterate through each rows from first sheet
    			Iterator<Row> rowIterator = sheet.iterator();
     
    			while (rowIterator.hasNext()) {
    				row = rowIterator.next();
     
    				// For each row, iterate through each columns
    				Iterator<Cell> cellIterator = row.cellIterator();
    				while (cellIterator.hasNext()) {
    					cell = cellIterator.next();
     
    					switch (cell.getCellType()) {
     
    					case Cell.CELL_TYPE_BOOLEAN:
    						cellValue.append(cell.getBooleanCellValue() + ";");
    						break;
     
    					/*case Cell.CELL_TYPE_NUMERIC:
    						cellValue.append(cell.getNumericCellValue() + ";");
    						break;*/
     
    					case Cell.CELL_TYPE_STRING:
    						cellValue.append(cell.getStringCellValue() + ";");
    						break;
     
    					case Cell.CELL_TYPE_BLANK:
    						cellValue.append("" + ";");
    						break;
     
    					default:
    						cellValue.append(cell + ";");
     
    					}
    				}
    				cellValue.append("\r\n"); // test add 2016_04_13__17:22
    				cellIterator = null;				
    			}
     
    			fos.write(cellValue.toString());
    			fos.close();
     
    		} catch (Exception e) {
    			System.err.println("Exception :" + e.getMessage());
    		}

    L'erreur vient du fait que l’écriture ne se fasse pas à toutes les lignes peut être ??

  6. #6
    Membre confirmé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Mai 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte Décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 363
    Points : 521
    Points
    521
    Par défaut
    Je n'ai pas regardé le code de ton programme mais je te rappelle un truc à propos d'Excel:
    Dans un fichier Excel, on a 16 384 colonnes et 1 048 576 lignes (en tout cas sur le fichier que j'ai regardé), ce qui donne, d'après la calculette Windows, 17 179 869 184 cellules.

    En mémoire, ça doit prendre de la place

    Il serait peut-être utile de limiter tes parcours à un nombre maximum de lignes et de colonnes

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    J'ai parcouru un peu le web et java charge tout le fichier excel en RAM... ce qui est vraiment problématique.

    J'utilise les librairies d'Apache POI, mais apparemment elles ne doivent pas gérer les gros fichier excel.

    Je ne peux pas tronquer le fichier excel car j'ai besoin de convertir tout le classeur en CSV.
    Cela fonctionne avec des fichier jusqu'à 10Mo mais au delà, j'ai une erreur de mémoire !

    Je suis un peu surpris qu'avec JAVA on ne puisse pas gérer les gros classeurs Excel !

    je continu mes recherches mais j'ai l'impression que la plupart des gens ont le même problème...
    Merci Prjprj de te poser sur mon problème

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 259
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    En BI4, je crois me souvenir qu'il y a une différence entre l'export en csv et l'enregistrer sous en csv :

    l'export : export les données de la requête
    l'enregistrer sous : enregistre le ou les rapports

    Cela peut t'aider ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    Bonjour isalille,

    Merci pour la réponse.

    En fait, je me sers de l'export en xlsx puis je transforme le fichier en CSV par le suite.

    En passant directement par l'export CSV, j'obtiens une erreur de mémoire et donc ça plante.

    Aurais-tu une solution ?? un saveas peut etre ... ??

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