Daten aus einer Excel oder CSV Datei in eine Jtable auslesen

Hasba

Grünschnabel
Hallo Zusammen,
ich muss ein Programm in Java schreiben, das mir es ermöglicht die Daten aus eine Excel-Datei ausliest und sie in eine JTable ausgibt.
bin für jede Hilfe dankbar
Gruss
 
Aus CSV in eine JTable wäre (für Fortgeschrittene/Profis) recht einfach, aus einer Excel-Tabelle könnte mehr als fummelig werden.
 
bin aber kein Profi! kannst Du mir dann helfen!
PS: bis jetzt habe keine Tabelle in Java estellt, es sollte so ausehen:
2 Spalten und unendliche Zeilen.
Danke im voraus
 
Das habe ich in 10min hingezimmert. Ob Du dabei aber viel lernst, wage ich zu bezweifeln...

Code:
/*
 * Created on 21.03.2005
 */

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.io.*;

public class CSVTest extends JFrame
{
  private class MeinWindowListener extends WindowAdapter
  {
    public void windowClosing(WindowEvent arg0)
    {
      System.exit(0);
    }
  }

  private String[] columnNamen = { "Spalte 1", "Spalte 2" };
  private DefaultTableModel tableModel;
  private JButton button;
  private JComponent contentPane = (JComponent) getContentPane();

  CSVTest()
  {
    super("CSV Test");
    setSize(800, 600);
    initLayout();
    setLocationRelativeTo(null);
    addWindowListener(new MeinWindowListener());
    setVisible(true);
    setResizable(true);
  }

  void initLayout()
  {
    contentPane.setLayout(new BorderLayout());

    tableModel = new DefaultTableModel(null, columnNamen);
    JTable tableZahlen = new JTable(tableModel);
    tableZahlen.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    JScrollPane scrollPane = new JScrollPane(tableZahlen);
    scrollPane.setPreferredSize(new Dimension(300, 300));

    JPanel jpTable = new JPanel();
    jpTable.add("Center", scrollPane);
    contentPane.add("West", jpTable);

    button = new JButton("Einlesen");
    button.addActionListener(new ActionListener()
          {
      		public void actionPerformed(ActionEvent e)
      		{
      		  readFile();
      		}
          });

    JPanel jpButton = new JPanel();
    jpButton.add(button);
    contentPane.add("South", jpButton);

  }

  /**
   * 
   */
  protected void readFile()
  {
    try{
      BufferedReader reader = new BufferedReader(new FileReader("C:\\Mappe1.csv"));
      
      String strLine;
      while ( (strLine = reader.readLine()) != null )
      {
        String[] items = strLine.split(";");
        tableModel.addRow(items);
      }
      tableModel.fireTableDataChanged();
    }
    catch(FileNotFoundException e) {}
    catch(IOException e) {}
  }

  public static void main(String[] args)
  {

    CSVTest frame = new CSVTest();
    frame.setLocation(150, 90);
    frame.setSize(600, 500);
    frame.setResizable(true);
    frame.setVisible(true);
  }
}

Mappe1.csv:

1;Hund
2;Katze
3;Maus
4;Tiger
5;Panther
6;Giraffe
7;Jaguar
8;Esel
9;Pferd
 
Hallo!

Schau mal hier:
Code:
/**
 * 
 */
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

/**
 * @author Administrator
 * 
 */
public class CSVJTableExample extends JFrame {

	private JTable table;

	private JButton btnAction;

	private JFileChooser fileChooser = new JFileChooser() {
		{
			setFileFilter(new FileFilter() {

				@Override
				public boolean accept(File f) {
					return f.getName().toLowerCase().endsWith("csv");
				}

				@Override
				public String getDescription() {
					return "CSV Datei (Comma Seperated Values)";
				}

			});
		}
	};

	public CSVJTableExample() {
		super("CSVJTableExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		btnAction = new JButton("Dateiauswahl");
		btnAction.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!(fileChooser.showOpenDialog(CSVJTableExample.this) == JFileChooser.APPROVE_OPTION))
					return;
				final File file = fileChooser.getSelectedFile();
				if (file == null)
					return;

				SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						TableModel model = parseCSVAndCreateTableModel(file);
						table.setModel(model);
					}
				});

			}
		});

		table = new JTable();
		add(new JScrollPane(table), BorderLayout.CENTER);
		add(btnAction, BorderLayout.SOUTH);

		pack();
		setVisible(true);
	}

	private TableModel parseCSVAndCreateTableModel(File file) {

		Vector v = new Vector();
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(file));

			// Überschriften stehen in erster Zeile
			String[] rowItems = br.readLine().split(";");
			Vector header = new Vector(Arrays.asList(rowItems));
			while (br.ready()) {
				rowItems = br.readLine().split(";");
				v.add(new Vector(Arrays.asList(rowItems)));
			}
			DefaultTableModel model = new DefaultTableModel(v, header);
			return model;

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return null;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new CSVJTableExample();
	}

}

Gruß Tom
 
Hallo zusammen,
ich habe jetzt die Daten aus einer CSV-Datei ausgelesen und wierder in eine CVS-Datei gespreichert(vorerst), diese Daten möchte ich gern sortieren z.B. nach Nachnamen, und die Werte, die zu diesem Nachnamen gehören summieren. Anschliessend das Ergebnis in eine JTable ausgebe.
für jede Hilfe bin sehr dankbar.
 
Danke aber deine Antwort hilft mir nicht! bin nur ein Anfänger und häge zurzeit an einer Aufgabe!
trotzdem Danke.
 
Hallo user Profi,
ich habe mir jetzt die Daten soweit aus der CSV-Datei geholt und in eine JTable dargestellt. Die Daten sind auch sortiert(string).Nun möchte ich z.b. Spalten- und/oder Zeilenweise eine Markierung machen um die Daten mit Strg und C zu kopieren und manuell in eine ander Datei einfüge.
Die Markierung kann bis jetzt machen mit:
table.setSelectionForeground(Color.YELLOW);
table.setSelectionBackground(Color.RED);
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

allerdings wenn es eine grosse Datei ist ist dann umstandiger. Deshalb micht dann z.B. mit einem Doppelklick auf die Spaltebeschriftung die ganze Spalte markieren.

für jede Hilfe bin sehr dankbar. Falls Du den Code brauchst kann ich Dir schicken.

Danke vielmals
 
Zurück