Excel Tabelle mithilfe von GUI füllen

Tinipieps

Mitglied
Halli Hallo!
Ich bin ziemlich neu in der Welt von Java.
Habe bis jetzt zwei Lehrgänge besucht und wollte nun ein wenig rumprobieren.
Da wir regelmäßig zu Hause die Zählerstände ablesen, dachte ich mir, dass ich ein Programm baue, bei dem man die Daten in einer GUI eingibt und diese dann in eine Excel-Tabelle geschrieben werden!

Leider hakt es irgendwo an einer STelle und ich weiß nicht wo

Vielleicht kann mir jemand helfen!?

Irgendwie nimmt er die Daten im TextField nicht an. Programmier in Eclipse und das zeigt mir keinerlei Fehler an!

Habe zwei Klassen gebastelt, die ich dann über eine Klasse mit main-Methode aufrufe:
main-Klasse (Application):
Code:
import java.io.IOException;


public class Application {

	public static void main(String[] args) {
		
		Tabelle2 tab= new Tabelle2();
		try {
			tab.tabelleErzeugen();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		GUI g=new GUI("Zaehlerstand");
		g.setVisible(true);
	}

}

Klasse, um Tabelle zu erzeugen und Einträge zu steuern:
Code:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;

public class Tabelle2 {
	
	HSSFWorkbook wb; 
	HSSFSheet sh ;
	HSSFRow row; 
	HSSFCell cell;
	HSSFCellStyle csty;
	
	
	public void tabelleErzeugen()throws IOException {
		// Neue Mappe erzeugen
		wb = new HSSFWorkbook();
		// Neue Tabelle erzeugen
		sh = wb.createSheet();
		// Objektreferenz auf Reihe erzeugen
		row = null;
		// Objektreferenz auf Zelle erzeugen
		cell = null;
		// Zellformat Objekt erzeugen
		csty = wb.createCellStyle();
		// Datenformat Objekt erzeugen
		// HSSFDataFormat df = wb.createDataFormat();
		// Font-Objekt erzeugen
		HSSFFont font = wb.createFont();
		// Schriftgröße auf 12pt einstellen
		font.setFontHeightInPoints((short) 12);
		// Schriftfarbe blau
		font.setColor((short)0xC);
		// Schriftart
		font.setFontName("Times New Roman");
		// Fett
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// Schriftart auf Zellformat-Objekt anwenden
		csty.setFont(font);
	
		// Rahmen einstellen
		csty.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		csty.setBottomBorderColor(HSSFColor.PINK.index);
		csty.setBorderLeft(HSSFCellStyle.BORDER_THICK);
		
		// Zeile mit Überschriften erzeugen
		short rownum=0;
		row=sh.createRow(rownum);
		
		cell=row.createCell(0);
		cell.setCellStyle(csty);
		cell.setCellValue("Datum");
		
		cell=row.createCell(2);
		cell.setCellStyle(csty);
		cell.setCellValue("Stromzaehler");
		
		cell=row.createCell(4);
		cell.setCellStyle(csty);
		cell.setCellValue("Wasserzaehler");
		
		cell=row.createCell(6);
		cell.setCellStyle(csty);
		cell.setCellValue("Gaszaehler");
		
		// Ausgabedatei ereugen
		FileOutputStream out;
		try {
			out = new FileOutputStream("Tabelle.xls");
			// Mappe schreiben und Datei schließen
			wb.write(out);
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	} // Ende Tabelle erzeugen
	
	public void eintraegeErzeugen(String pDatum, String pZaehler, String pElement)
				throws FileNotFoundException, IOException {
		
		// Excel Mappe öffnen
		wb = new HSSFWorkbook(new FileInputStream("Tabelle.xls"));
		// Tabelle1 auswählen
		sh = wb.getSheet("Tabelle1");
		// Objektreferenz auf Zeile erzeugen
		HSSFRow row = null;
		// Objektreferenz auf Zelle erzeugen
		HSSFCell cell = null;
		
		int anzahl_zeilen=sh.getLastRowNum();
		row=sh.createRow(anzahl_zeilen+1);
		
		cell=row.createCell(0);
		cell.setCellValue(pDatum);
		
		if (pElement.equals("Stromzaehler")) {
				cell=row.createCell(2);
				cell.setCellValue(pZaehler);
		}
		
		if (pElement.equals("Wasserzaehler")) {
			cell=row.createCell(4);
			cell.setCellValue(pZaehler);
		}
		
		if (pElement.equals("Gaszaehler")) {
			cell=row.createCell(6);
			cell.setCellValue(pZaehler);
		}
		
		// Ausgabedatei ereugen
		FileOutputStream out;
		try {
			out = new FileOutputStream("Tabelle.xls");
			// Mappe schreiben und Datei schließen
			wb.write(out);
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	} // Ende eintraegeErzeugen

		
} // Ende class

Klasse, die GUI erstellt:
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

public class GUI extends JFrame implements ListDataListener {

	private static final long serialVersionUID = 1L;
	
	
	Tabelle2 tab=new Tabelle2();
	private DefaultComboBoxModel comboBoxModel1;
	
	JLabel l1=new JLabel("Datum",0);
	JLabel l2=new JLabel("Datum",0);
	JTextField tf1=new JTextField(20);
	JComboBox cb1;	
	JLabel l3=new JLabel("Zaehlerstand",0);
	JTextField tf2=new JFormattedTextField(20);
	JButton b1=new JButton("eintragen");
		
	JPanel p=new JPanel();
	
	/**
	 * Fenstererzeugung
	 * @param pTitel
	 */
	public GUI(String pTitel) {
		super(pTitel);
		this.createGUI();
		this.eventhandling();
		
	}

	private void createGUI() {
				
		this.fillComboBox();
		
		this.add(this.l1, BorderLayout.NORTH);
		l1.setForeground(Color.RED);
		l1.setFont(new Font("Datum", 0, 24));
				
		// Layout stapeln
		this.p.setLayout(new GridLayout(4,2));
		this.p.add(this.cb1);
		this.p.add(this.b1);
		this.p.add(new Label());
		this.p.add(new Label());
		this.p.add(this.l2);
		l2.setFont(new Font("Datum", 0, 18));
		this.p.add(this.tf1);
		this.p.add(this.l3);
		l3.setFont(new Font("Zaehlerstand", 0, 18));
		this.p.add(this.tf2);
		this.add(this.p, BorderLayout.CENTER);
			
		this.pack();
		
	}
	
	private void eventhandling() {
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setResizable(false);
		b1.addActionListener(new ActionListener () {
			@Override
			public void actionPerformed(ActionEvent e) {
				try{
					if ( ! tf1.getText().isEmpty() || ! tf2.getText().isEmpty() ){
						tf1.setText("");
						tf2.setText("");
						cb1.getSelectedItem().toString();
						
						tab.eintraegeErzeugen(tf1.getText(), 
								tf2.getText(), cb1.getSelectedItem().toString());
					}
					else {
						JOptionPane.showMessageDialog(
							GUI.this, 
							"Bitte geben Sie das Datum UND den Zaehlerstand der Ablesung an");
					}
					
				} catch (Exception ex) {
					// ex.getStackTrace();
					JOptionPane.showMessageDialog(GUI.this, "FEHLER");
				}
			}
		});
		
	
		// Uhrzeit einfuegen
		Timer t=new Timer();
		// (Klasse, wann beginnen, warten bis naechster Aufruf)
		t.schedule(new Datum(), 0, 1000);
	}
	
	
	private void fillComboBox() {
		cb1=new JComboBox();
		
		// ComboBoxModel erzeugen
		Vector<String> zaehler=new Vector<String>();
		zaehler.add("Stromzaehler");
		zaehler.add("Wasserzaehler");
		zaehler.add("Gaszaehler");
		
		comboBoxModel1=new DefaultComboBoxModel(zaehler);
		comboBoxModel1.addListDataListener(this);
		
		//ComboBoxModel setzen
		cb1.setModel(comboBoxModel1);		
		
	}

	@Override
	public void contentsChanged(ListDataEvent arg0) {
		System.out.println(cb1.getModel().getSelectedItem());
	}

	@Override
	public void intervalAdded(ListDataEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void intervalRemoved(ListDataEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	

	private class Datum extends TimerTask {

		SimpleDateFormat date=new SimpleDateFormat(
										"EEE, d MMM yyyy HH:mm:ss");
		
		@Override
		public void run() {
			
			String date1=date.format(new Date());
			l1.setText(date1);
			
		}
			
	}

	
}
 
Moin!
Code:
if ( ! tf1.getText().isEmpty() || ! tf2.getText().isEmpty() ){
						tf1.setText("");
						tf2.setText("");
						cb1.getSelectedItem().toString();
						
						tab.eintraegeErzeugen(tf1.getText(), 
								tf2.getText(), cb1.getSelectedItem().toString());
Du fragst hier ab, ob eins der beiden Textfelder nicht leer ist, leerst sie dann selbst und willst dann mit dem leeren Text die Tabelle füllen?
So,
Code:
if ( !tf1.getText().isEmpty() && !tf2.getText().isEmpty() ){
tab.eintraegeErzeugen(tf1.getText(), 
								tf2.getText(), cb1.getSelectedItem().toString());
}
würde es mehr Sinn machen!

Viele Grüße
 
Danke für den Tipp, Den Fehler hatte ich auch nun schon selbst gefunden!
Der richtige Fehler:
Das Sheet im geöffneten Workbook heißt "Sheet0" und nicht "Tabelle 1".
Hier mal der fertig programmierte und funktionierende Code:

Tabelle:
Code:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;

public class Tabelle2 {
	
	HSSFWorkbook wb; 
	HSSFSheet sh ;
	HSSFRow row; 
	HSSFCell cell;
	HSSFCellStyle csty;
	
	
	public void tabelleErzeugen()throws IOException {
		// Neue Mappe erzeugen
		wb = new HSSFWorkbook();
		// Neue Tabelle erzeugen
		sh = wb.createSheet();
		// Objektreferenz auf Reihe erzeugen
		row = null;
		// Objektreferenz auf Zelle erzeugen
		cell = null;
		// Zellformat Objekt erzeugen
		csty = wb.createCellStyle();
		// Datenformat Objekt erzeugen
		// HSSFDataFormat df = wb.createDataFormat();
		// Font-Objekt erzeugen
		HSSFFont font = wb.createFont();
		// Schriftgröße auf 12pt einstellen
		font.setFontHeightInPoints((short) 12);
		// Schriftfarbe blau
		font.setColor((short)0xC);
		// Schriftart
		font.setFontName("Times New Roman");
		// Fett
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// Schriftart auf Zellformat-Objekt anwenden
		csty.setFont(font);
	
		// Rahmen einstellen
		csty.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		csty.setBottomBorderColor(HSSFColor.PINK.index);
		csty.setBorderLeft(HSSFCellStyle.BORDER_THICK);
		
		// Zeile mit Überschriften erzeugen
		short rownum=0;
		row=sh.createRow(rownum);
		
		cell=row.createCell(0);
		cell.setCellStyle(csty);
		cell.setCellValue("Datum");
		
		cell=row.createCell(2);
		cell.setCellStyle(csty);
		cell.setCellValue("Stromzaehler");
		
		cell=row.createCell(4);
		cell.setCellStyle(csty);
		cell.setCellValue("Wasserzaehler");
		
		cell=row.createCell(6);
		cell.setCellStyle(csty);
		cell.setCellValue("Gaszaehler");
		
		// Ausgabedatei ereugen
		FileOutputStream out;
		try {
			out = new FileOutputStream("Tabelle.xls");
			// Mappe schreiben und Datei schließen
			wb.write(out);
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	} // Ende Tabelle erzeugen
	
	public void eintraegeErzeugen(String pDatum, String pZaehler, String pElement)
				throws FileNotFoundException, IOException {
		
		System.out.println(pDatum+" "+pZaehler+" "+pElement);
		// Excel Mappe öffnen
		wb = new HSSFWorkbook(new FileInputStream("Tabelle.xls"));
		// Tabelle1 auswählen
		sh = wb.getSheet("Sheet0");
		// Objektreferenz auf Zeile erzeugen
		HSSFRow row = null;
		// Objektreferenz auf Zelle erzeugen
		HSSFCell cell = null;
		
		int anzahl_zeilen=sh.getLastRowNum();
		row=sh.createRow(anzahl_zeilen+1);
		
		cell=row.createCell(0);
		cell.setCellValue(pDatum);
		
		if (pElement.equals("Stromzaehler")) {
				cell=row.createCell(2);
				cell.setCellValue(pZaehler);
		}
		
		if (pElement.equals("Wasserzaehler")) {
			cell=row.createCell(4);
			cell.setCellValue(pZaehler);
		}
		
		if (pElement.equals("Gaszaehler")) {
			cell=row.createCell(6);
			cell.setCellValue(pZaehler);
		}
		
		// Ausgabedatei ereugen
		FileOutputStream out;
		try {
			out = new FileOutputStream("Tabelle.xls");
			// Mappe schreiben und Datei schließen
			wb.write(out);
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	} // Ende eintraegeErzeugen

       public void tabelleFuellen(String pDatum, String pZaehler, String pElement)
				throws FileNotFoundException, IOException {
		
		File tab=new File("Tabelle.xls");
		if( !tab.exists()) {
			this.tabelleErzeugen();
			// System.out.println("Tabelle wird erzeugt");
			this.eintraegeErzeugen(pDatum, pZaehler, pElement);
			// System.out.println("Eintraege werden erzeugt");
		}
			
		else if ( tab.exists())
			this.eintraegeErzeugen(pDatum, pZaehler, pElement);
	}// Ende tabelleFuellen()

		
} // Ende class

GUI:

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

public class GUI extends JFrame implements ListDataListener {

	private static final long serialVersionUID = 1L;
	
	
	Tabelle2 tab=new Tabelle2();
	private DefaultComboBoxModel comboBoxModel1;
	
	JLabel l1=new JLabel("Datum",0);
	JLabel l2=new JLabel("Datum",0);
	JTextField tf1=new JTextField(20);
	JComboBox cb1;	
	JLabel l3=new JLabel("Zaehlerstand",0);
	JTextField tf2=new JFormattedTextField();
	JButton b1=new JButton("eintragen");
		
	JPanel p=new JPanel();
	
	/**
	 * Fenstererzeugung
	 * @param pTitel
	 */
	public GUI(String pTitel) {
		super(pTitel);
		this.createGUI();
		this.eventhandling();
		
	}

	private void createGUI() {
				
		this.fillComboBox();
		
		this.add(this.l1, BorderLayout.NORTH);
		l1.setForeground(Color.RED);
		l1.setFont(new Font("Datum", 0, 24));
				
		// Layout stapeln
		this.p.setLayout(new GridLayout(4,2));
		this.p.add(this.cb1);
		this.p.add(this.b1);
		this.p.add(new Label());
		this.p.add(new Label());
		this.p.add(this.l2);
		l2.setFont(new Font("Datum", 0, 18));
		this.p.add(this.tf1);
		this.p.add(this.l3);
		l3.setFont(new Font("Zaehlerstand", 0, 18));
		this.p.add(this.tf2);
		this.add(this.p, BorderLayout.CENTER);
			
		this.pack();
		
	}
	
	private void eventhandling() {
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setResizable(false);
		b1.addActionListener(new ActionListener () {
			@Override
			public void actionPerformed(ActionEvent e) {
				try{
					if ( ! tf1.getText().isEmpty() && ! tf2.getText().isEmpty() ){
																	
						tab.tabelleFuellen(tf1.getText(), 
								tf2.getText(), cb1.getSelectedItem().toString());
						tf1.setText("");
						tf2.setText("");
					}
					else {
						JOptionPane.showMessageDialog(
							GUI.this, 
							"Bitte geben Sie das Datum UND den Zaehlerstand der Ablesung an");
					}
					
				} catch (Exception ex) {
					ex.printStackTrace();
					JOptionPane.showMessageDialog(GUI.this, "FEHLER "+ex);
				}
			}
		});
		
	
		// Uhrzeit einfuegen
		Timer t=new Timer();
		// (Klasse, wann beginnen, warten bis naechster Aufruf)
		t.schedule(new Datum(), 0, 1000);
	}
	
	
	private void fillComboBox() {
		cb1=new JComboBox();
		
		// ComboBoxModel erzeugen
		Vector<String> zaehler=new Vector<String>();
		zaehler.add("Stromzaehler");
		zaehler.add("Wasserzaehler");
		zaehler.add("Gaszaehler");
		
		comboBoxModel1=new DefaultComboBoxModel(zaehler);
		comboBoxModel1.addListDataListener(this);
		
		//ComboBoxModel setzen
		cb1.setModel(comboBoxModel1);		
		
	}

	@Override
	public void contentsChanged(ListDataEvent arg0) {
		System.out.println(cb1.getModel().getSelectedItem());
	}

	@Override
	public void intervalAdded(ListDataEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void intervalRemoved(ListDataEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	

	private class Datum extends TimerTask {

		SimpleDateFormat date=new SimpleDateFormat(
										"EEE, d MMM yyyy HH:mm:ss");
		
		@Override
		public void run() {
			
			String date1=date.format(new Date());
			l1.setText(date1);
			
		}
			
	}

	
}

Application:
Code:
public class Application {

	public static void main(String[] args) {
			
		GUI g=new GUI("Zaehlerstand");
		g.setVisible(true);
	}

}
 
Zuletzt bearbeitet:
Zurück