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 :

Java - Word : Récupérer les colonnes d'un tableau séparément


Sujet :

Documents Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Par défaut Java - Word : Récupérer les colonnes d'un tableau séparément
    Salut à tous,

    Petit problème pour récupérer les colonnes d'un tableau word séparément.
    Qu'est-ce qu'il ne vas pas dans ce code :
    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
    package word;
     
    import java.awt.Color;
    import java.io.FileInputStream;
    import java.util.List;
     
    import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.border.LineBorder;
    import javax.swing.table.DefaultTableModel;
     
    import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    import org.apache.poi.xwpf.usermodel.XWPFTableCell;
    import org.apache.poi.xwpf.usermodel.XWPFTableRow;
     
    public class PersoExtractor
    {
    	final static String FILE_PATH = "E:\\2014-2016\\franglais\\vocabulaire_anglais.docx";
     
    	public static void main(String[] args) throws Exception
    	{
    		XWPFDocument document = new XWPFDocument (
    				new FileInputStream(FILE_PATH));
    		// using XWPFWordExtractor Class
    		XWPFWordExtractor we = new XWPFWordExtractor(document);
    		List<XWPFTable> tables = document.getTables();
    		int tableIndex = 0;
    		for (XWPFTable table: tables)
    		{
    			//table.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));
    			for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++)
    			{
    				XWPFTableRow row = table.getRow(rowIndex);
    				int numberOfCell = row.getTableCells().size();
    				for (int colIndex = 0; colIndex < numberOfCell; colIndex++)
    				{			
    					XWPFTableCell cell = row.getCell(colIndex);
    					//cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));
    					table.getRow(rowIndex).getCell(colIndex).getText();
    					String[][] rows = new String[rowIndex][colIndex];
    					rows[rowIndex][colIndex] = table.getRow(rowIndex).getCell(colIndex).getText();
     
    					String col1 = rows[rowIndex][0];
    					String col2 = rows[rowIndex][1];
     
    					System.out.println(col1);
    					/*final String[][] data = 
    							new String[][] {{col1},{col2}};
    					JTable t = new JTable();
    					t.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
    					DefaultTableModel model = (DefaultTableModel) t.getModel();
    					model.addColumn("column 1");
    					model.addColumn("column 2");
    					if (rowIndex < table.getNumberOfRows())
    						model.insertRow(rowIndex, data);
    					JFrame frame = new JFrame("My table");
    					frame.getContentPane().add(t);
    					frame.pack();
    					frame.setVisible(true);
    					*/
    				}
    			}
    			tableIndex++;
    		}
    		we.close();
    		document.close();
    	}
    }
    Merci d'avance pour vos aides

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Par défaut
    C'est presque bon, avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String col1 = table.getRow(rowIndex).getCell(0).getText();
    String col2 = table.getRow(rowIndex).getCell(1).getText();
    Au lieu de m'embêter avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[][] rows = new String[rowIndex][colIndex];
    rows[rowIndex][colIndex] = table.getRow(rowIndex).getCell(colIndex).getText();
    Mais pourquoi m'affiche t-il deux fois chaque lignes ?

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Bonjour,
    Citation Envoyé par nadong94 Voir le message
    Mais pourquoi m'affiche t-il deux fois chaque lignes ?
    Je dirais que probablement tu as deux colonnes et que pour chaque colonne tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String col1 = rows[rowIndex][0];
    String col2 = rows[rowIndex][1];
    System.out.println(col1);
    Donc tu affiche toujours la col1 pour le rowIndex en cours.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Par défaut
    Avec ceci il me fait :
    ligne 1 : valeur bon1, valeur2 vide
    encore ligne 1 : valeur1 bon, valeur2 bon
    ligne 2 : valeur bon1, valeur2 vide
    encore ligne 2 : valeur1 bon, valeur2 bon

    Il le fait pour toutes les lignes :
    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
    private JTable createJTable(String name, String[] values)
    	{
    		JTable table = new JTable();
    		table.setName(name);
    		table.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
     
    		DefaultTableModel model = (DefaultTableModel) table.getModel();
    		model.addColumn("French");
    		model.addColumn("English");
    		//two columns
    		String[] data = new String[values.length];
    		for (int cellContent = 0; cellContent < values.length; cellContent++)
    		{
    			data[cellContent] = values[cellContent];
    			model.addRow(data);
    		}
    		return table;
    	}
    Et dans la Jtable il me met que les deux ligne donc le doublon ligne 1
    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
    private List<JPanel> listJPanel() throws Exception
    	{
    		List<JPanel> listJPanel = new ArrayList<JPanel>();
    		if (jPanel == null)
    		{
    			jPanel = new JPanel();
    			JTable viewTable = new JTable();
    			List<XWPFTable> tables = readAllTables();
    			//Index of tables
    			tableIndex = 0;
    			for (XWPFTable table : tables)
    			{
    				//index of rows
    				for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++)
    				{
    					col1 = table.getRow(rowIndex).getCell(0).getText();
    					col2 = table.getRow(rowIndex).getCell(1).getText();
    					data = new String[] {col1, col2};
     
    					//Create the tables
    					String name = "Table "+ tableIndex;
    					viewTable = createJTable(name, data);
    					//Create the panels
    					jPanel = resizeJTableColumns(viewTable, name);
    					jPanel.setName(name);
    					listJPanel.add(jPanel);
    				}
    				tableIndex++;
    			}
    		}
    		we.close();
    		document.close();
     
    		return listJPanel;
    	}
    Merci encore

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par nadong94 Voir le message
    Et dans la Jtable il me met que les deux ligne donc le doublon ligne 1
    comme je te l'ai dis dans mon précédent post, si tu boucles sur les colonnes pour générer les lignes tu aura autant de ligne qu'il y a de colonne !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //two columns
    		String[] data = new String[values.length];
    		for (int cellContent = 0; cellContent < values.length; cellContent++) // tu boucles sur les colonnes... dans ton cas 2 colonnes
    		{
    			data[cellContent] = values[cellContent]; // au 1er tour le tableau data contient values[0] et null et au 2eme tour tu remplaces le null par values[1]
    			model.addRow(data); // pour chaque valeur de values tu ajoute une ligne au modèle... donc 2 colonnes = 2 lignes ajouter
    		}
    Pourquoi ne pas faire simplement :
    Dans ce cas tu aura une seul ligne avec tes 2 valeurs !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Par défaut
    Tu as raison, mais maintenant il ne m'affiche que la dernière ligne du dernier tableau ?
    Et donc la jtable ne fait qu'une seule ligne

    Pourtant quand je fais un System.out.println(tables.get(0).getText());Il m'affiche bien toutes les valeurs, le problème vient donc, uniquement de l'affichage de la jtable

Discussions similaires

  1. [VBA|EXcel]Moduler les colonnes d'un tableau
    Par quario dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/03/2007, 17h09
  2. Réponses: 6
    Dernier message: 27/09/2006, 20h27
  3. [VBA-E]Formulaire word, récupérer les données dans excel
    Par sablier dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 30/05/2006, 07h38
  4. récupérer les doublons d'un tableau
    Par stoyak dans le forum Langage
    Réponses: 4
    Dernier message: 11/05/2006, 11h50
  5. [javascript] récupérer les "clés" d'un tableau
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2006, 10h13

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