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 :

Comment créer un classeur excel de façon spécifique ?


Sujet :

Documents Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut Comment créer un classeur excel de façon spécifique ?
    Salut à tous ?

    J'ai un bouton qui permet de générer un classeur Excel (xls, xlsx) qui s'occupe uniquement de créer le classeur, et appel une méthodes pour son contenu.
    La méthode du bouton de génération :
    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
     
    public boolean dataNEMO2Excel()
    {
    	String fileName = Events.getFile();
    	StringBuilder builder = new StringBuilder(fileName);
    	if (fileName != "")
    	{
    		try {
    			int index = fileName.lastIndexOf(".xl");
    			builder.insert(index,"_NEMO");
    			fileName = builder.toString();
     
    			System.out.println(fileName);
    			FileOutputStream out = new FileOutputStream(fileName);
    		        FileInputStream in = new FileInputStream(fileName);
    			Workbook workbook = WorkbookFactory.create(in);
    			utiMethods.addLog(fileName +" was created", infoMessage.info);
     
    			//dataNEMO2Excel(UtilityMethods.getInstance().getMap_cable());
    			//dataNEMO2Excel(UtilityMethods.getInstance().getMap_link());
    			//dataNEMO2Excel(UtilityMethods.getInstance().getMap_networkList());
    			//dataNEMO2Excel(UtilityMethods.getInstance().getMap_networkItem());
    			dataNEMO2Excel(workbook, UtilityMethods.getInstance().getMap_port());
     
    			workbook.write(out);
    			in.close();
    			out.close();
    			workbook.close();
    		} catch (EncryptedDocumentException e) {
    			UtilityMethods.getStackTrace(e);
    			e.printStackTrace();
    		} catch (InvalidFormatException e) {
    			UtilityMethods.getStackTrace(e);
    			e.printStackTrace();
    		} catch (IOException e) {
    			UtilityMethods.getStackTrace(e);
    			e.printStackTrace();
    		}		
    		return true;
    	}
    	return false;
    }
    La méthode qui crée le contenu :
    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
     
    public Sheet dataNEMO2Excel(Workbook workbook, MAP_Port map_port)
    {
    	Sheet sheet = null;
    	Row row = null;
    	String[] headers = new String[]{};
     
    	for (String sheetName :mapHeaderNEMO.keySet() )
    	{
    		sheet = workbook.createSheet(sheetName);
    		utiMethods.addLog(sheetName +" was created", infoMessage.info);
     
    		headers = mapHeaderNEMO.get(sheetName);
     
    	}      
           row = sheet.createRow(2);
     
           // Ajouter des données dans les cellules
           row.createCell(0).setCellValue("Java Execl");
           row.createCell(1).setCellValue("Mesexemple.com");
           row.createCell(2).setCellValue("Sakoba Adams");
     
    	return sheet;
    }
    Ce code Crée un classeur sans feuille et donc avec un message d'erreur quand on l'ouvre disant que le format est incorrect, et dans la console :
    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
     
    HDMT_NEMO.xlsx
    Exception in thread "AWT-EventQueue-0" org.apache.poi.EmptyFileException: The supplied file was empty (zero bytes long)
    	at org.apache.poi.util.IOUtils.peekFirst8Bytes(IOUtils.java:55)
    	at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:203)
    	at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:170)
    	at EVENT.UtilityMethods.dataNEMO2Excel(UtilityMethods.java:802)
    	at EVENT.Events.btnGenerate_click(Events.java:162)
    	at EVENT.Events.actionPerformed(Events.java:55)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(Unknown Source)
    	at javax.swing.SwingUtilities.notifyAction(Unknown Source)
    	at javax.swing.JComponent.processKeyBinding(Unknown Source)
    	at javax.swing.KeyboardManager.fireBinding(Unknown Source)
    	at javax.swing.KeyboardManager.fireKeyboardAction(Unknown Source)
    	at javax.swing.JComponent.processKeyBindingsForAllComponents(Unknown Source)
    	at javax.swing.JComponent.processKeyBindings(Unknown Source)
    	at javax.swing.JComponent.processKeyEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$000(Unknown Source)
    	at java.awt.EventQueue$1.run(Unknown Source)
    	at java.awt.EventQueue$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$2.run(Unknown Source)
    	at java.awt.EventQueue$2.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    Merci d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu ne dois pas créer ton classeur à partir d'un fichier, mais juste faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbook workbook = new XSSFWorkbook();
    Le fichier n'interviendra que lors de la sauvegarde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    try( OutputStream out = Files.newInputStream(Paths.get("bidule.xlsx")) ) {
        wokkbook.write(out);
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    le truc c'est que je ne sais pas à l'avance s'il s’agit d'un xls ou xlsx donc je ne peux pas faire un new XSSFWorkbook()

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu demandes à l'utilisateur le nom du fichier, tu extrais l'extension, ce qui te permet de connaitre le type. Et ensuite :
    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
     
    File file = jfilechooser.getSelectedFile();
     
    if ( file!=null ) {
    String extension = extratcExtension(file);
     
     
    final WorkBook workbook;
    if ( "xls".equalsIgnoreCase( extension) ) {
         workbook = new HSSFWorkBook();
    }
    else if ( "xlsx".equalsIgnoreCase( extension )) {
         workbook = new XSSFWorkBook();
    }
    else {
        throw new IllegalStateException("Type inconnu"); // ou faire ce que tu veux...
    }
     
     
    // là tu remplies ton classeur
     
     
    // puis tu le sauvegardes...
     
    try(InputStream....
    }
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Très bien MERCI

    Voici le code final, ou en tout cas une partie :
    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    public boolean dataNEMO2Excel()
    {
    	String fileName = Events.getFile();
    	StringBuilder builder = new StringBuilder(fileName);
    	if (fileName != "")
    	{
    		try {
    			int index = fileName.lastIndexOf(".");
    			String extension = builder.substring(index+1).toString();
    			builder.insert(index,"_NEMO");
    			fileName = builder.toString();
    			File file = new File(fileName);
     
    			final Workbook workbook;
    			if ( "xls".equalsIgnoreCase(extension) )
    			{
    			     workbook = new HSSFWorkbook();
    			}
    			else if ( "xlsx".equalsIgnoreCase( extension ))
    			{
    			     workbook = new XSSFWorkbook();
    			}
    			else
    			{
    				throw new IllegalStateException("Unknow type");
    			}
    			// là tu remplies ton classeur
    			FileOutputStream out = new FileOutputStream(fileName);
    	        // puis tu le sauvegardes...
    			//Workbook workbook = WorkbookFactory.create(file);
    			utiMethods.addLog(fileName +" was created", infoMessage.info);
     
    			for (String sheetName :mapHeaderNEMO.keySet() )
    			{	
    				if (sheetName.equalsIgnoreCase("Port"))
    				{
    					if (dataNEMO2Excel(workbook, sheetName, UtilityMethods.getInstance().getMap_port()))
    						utiMethods.addLog(sheetName +" was created", infoMessage.info);
    					else
    						utiMethods.addLog("An error occured when creating the Excel sheet -> "+ sheetName +" ", infoMessage.error);
    				}
    				else if (sheetName.equalsIgnoreCase("Cable"))
    				{
    					//dataNEMO2Excel(UtilityMethods.getInstance().getMap_cable());
    				}
    				else if (sheetName.equalsIgnoreCase("Link"))
    				{
    					//dataNEMO2Excel(UtilityMethods.getInstance().getMap_link());
    				}
    				else if (sheetName.equalsIgnoreCase("Link"))
    				{
    				//dataNEMO2Excel(UtilityMethods.getInstance().getMap_networkList());
    				}
    				else if (sheetName.equalsIgnoreCase("Link"))
    				{
    				//dataNEMO2Excel(UtilityMethods.getInstance().getMap_networkItem());
    				}
    			}
    		        workbook.write(out);
    			workbook.close();
    			out.flush();
    			out.close();
    		} catch (EncryptedDocumentException e) {
    			UtilityMethods.getStackTrace(e);
    			e.printStackTrace();
    		/*} catch (InvalidFormatException e) {
    			UtilityMethods.getStackTrace(e);
    			e.printStackTrace();
    		*/} catch (IOException e) {
    			UtilityMethods.getStackTrace(e);
    			e.printStackTrace();
    		}
     
    		return true;
    	}
    	return false;
    }
     
    public boolean dataNEMO2Excel(Workbook workbook, String sheetName, MAP_Port map_port)
    {
    	try {
    		String[] headers = mapHeaderNEMO.get(sheetName);
    		Sheet sheet = workbook.createSheet(sheetName);
    		int rowNumber = 0;
    		Row rowHeader = sheet.createRow(rowNumber++);
    		int ind = 0;
    		for (String header : headers)
    			rowHeader.createCell(ind++).setCellValue(header);
     
    		//ajouter les headers de colonnes
    		for (N_Port port :map_port.values())
    		{
    			String[] values = port.getValues();
    			Row row = sheet.createRow(rowNumber++);
    			ind = 0;
    			for (String val : values)
    			{
    				row.createCell(ind++).setCellValue(val);
    			}
    		}
    		utiMethods.addLog(sheetName +" was created", infoMessage.info);
     
    		return true;
    	} catch (Exception e) {
    		utiMethods.addLog("An error occured when creating the Excel sheet -> "+ sheetName +" ", infoMessage.error);
     
    		return false;
    	}
    }
    @++

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Créer au plus tard le FileOutputStream : toujours éviter de laisser des ressources ouvertes trop longtemps. Tu n'en a pas besoin avant de faire le write.

    Le commentaire // là tu remplies ton classeur veut bien dire ce qu'il veut dire !
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Créer au plus tard le FileOutputStream : toujours éviter de laisser des ressources ouvertes trop longtemps. Tu n'en a pas besoin avant de faire le write.

    Le commentaire // là tu remplies ton classeur veut bien dire ce qu'il veut dire !
    Très bien ! merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FileOutputStream out = new FileOutputStream(fileName);
    workbook.write(out);
    workbook.close();

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/03/2009, 15h52
  2. Comment créer un document Excel?
    Par UnSofteuxAmateur dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/01/2008, 23h15
  3. Comment créer un fichier Excel avec Delphi ?
    Par nancyvoyer dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 30/11/2007, 20h39
  4. Comment accéder à un classeur Excel
    Par nicolas2603 dans le forum VB.NET
    Réponses: 5
    Dernier message: 21/09/2007, 23h33
  5. Réponses: 3
    Dernier message: 25/07/2005, 09h40

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