Daten aus einer Tabelle (z.b. excel) laden

jorgeHX

Erfahrenes Mitglied
Hallo Leute,
ich bräuchte mal Rat oder einen Vorschlag, wie ich am effektivsten Daten aus einer (Excel-)Tabelle laden kann.

Ich hab quasi in der ersten Spalte deutsche und in der zweiten Spalte englische Begriffe, die während der Laufzeit ausgelesen werden sollen, da dann z.B. der Button "Weiter" mit dem entsprechenden Begriff belegt werden soll.

Kann mir da jemand helfen? Gibt es dazu Beispiele? Wichtig ist eben auch, dass die Performance stimmt.

Schon jetzt einmal vielen Dank,
JP
 
Hallo JorgeHX,

ich habe in dem folgenden Programm EXCEL Daten aus einer CSV Datei gelesen und in Blöcken zu je iMaxSätzeAufEinmal Sätzen in der Datenbank gespeichert.
Den Parameter kannst du ja ändern. Ich habe mit 125 auch von der Performance gute Erfahrungen gemacht.
Der Soucecode lässt an Eleganz zu wünschen übrig, dafür ist TOM zuständig,
aber bei ffunktioniert die Variante.

Gruß

Harald

import java.awt.Component;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

public class AusgabenLadenEinSchritt {

public static final int iMaxSätzeAufEinmal = 125; // 750;

public static String sDateiname = GlobaleDaten.sDasiAusgaben;

// Pro Feld eine ArrayList definieren, weil diese Listen
// zur Laufzeit wachsen können (ein normales Array nicht)
// Wenn alle Daten gelesen sind, werden die Daten aus den Array Listen
// in ein Array kopiert
public static ArrayList aListKey = new ArrayList(1000);
public static ArrayList aListBudat = new ArrayList(1000);
public static ArrayList aListWgrnr = new ArrayList(1000);
public static ArrayList aListBetrag = new ArrayList(1000);
public static ArrayList aListText = new ArrayList(1000);
public static ArrayList aListDatanl = new ArrayList(1000);
public static ArrayList aListDataend = new ArrayList(1000);
public static String[][] sAusgabenTabelle = null;
public int iZähler = 0;
public static int iLeereElemente = 0;

public static void main(String[] args) {
System.out.println("Start Programm AusgabenLadenEinSchritt");

// String sAusgabe = null;
// int iAnzFehler = 0;

int iAnzInsert = 0;
{
try {
// Ausgabedatei auf dem PC suchen
// Datei zuweisen
System.out.println("Einlesen Datei: " + sDateiname);
FileReader fr = new FileReader(sDateiname);
BufferedReader br = new BufferedReader(fr);
// Feld für Eingabe definieren und ersten Satz einlesen

int iZähler = 0;
String sKeyAusgaben = null;
String sBudat = null;
String sWgrnr = null;
String sBetrag = null;
String sText = null;
String sDatanl = null;
String sDataend = null;
Datumsroutinen daru = new Datumsroutinen();

String[] sErgebnis = null; // für den Split Befehl
String sSatz = br.readLine();

while (sSatz != null) {
iZähler++;

sErgebnis = sSatz.split(";");
if (sErgebnis.length == 0) {
iLeereElemente++;
} else {

sKeyAusgaben = sErgebnis[0];
sBudat = sErgebnis[1];
sWgrnr = sErgebnis[2];
sBetrag = sErgebnis[3].replaceFirst(",", ".");
sText = sErgebnis[4];
sDatanl = sErgebnis[5];
sDataend = sErgebnis[6];

// Datumsfelder vom Format 17.01.2005 in 2005-01-17 umwandeln
try {
// Nur umwandeln, wenn ein Punkt vorkommt, sonst
// wird in der
// Datenbank 000-00-00 eingetragen
// Umwandeln, wenn an Stelle 3 und 6 ein Punkt steht
// dann ist das Format 21.03.1959
if (sBudat.indexOf(".", sBudat.indexOf(".") + 1) == 5) {
sBudat = daru.datumPunktnachStrich(sBudat);
}
if (sDatanl.indexOf(".", sDatanl.indexOf(".") + 1) == 5) {
sDatanl = daru.datumPunktnachStrich(sDatanl);
}
if (sDataend
.indexOf(".", sDataend.indexOf(".") + 1) == 5) {
sDataend = daru.datumPunktnachStrich(sDataend);
}

} catch (Exception ex) {

System.out.println("Fehler bei daru umwandeln: "
+ sBudat);
ex.printStackTrace();
}

// Daten in ArrayListen sammeln
// Grund: ArrayListen können dynamisch wachsen

aListKey.add(sKeyAusgaben);
aListBudat.add(sBudat);
aListWgrnr.add(sWgrnr);
aListBetrag.add(sBetrag);
aListText.add(sText);
aListDatanl.add(sDatanl);
aListDataend.add(sDataend);

iAnzInsert++;
}

sSatz = br.readLine();
}
br.close();

} catch (FileNotFoundException e) // Datei gibt’s nich’
{
System.err.println("Datei gibt’s nicht!");
} catch (IOException e) // Schreib- Leseprobleme
{
System.err.println("Schreib- Leseprobleme!");
}
}

// Ausgabedaten aus ArrayListen in ein Array kopieren

sAusgabenTabelle = new String[iMaxSätzeAufEinmal][7];
int jZähler = 0; // Satz innerhalb der ArrayListen
@SuppressWarnings("unused") boolean bWeiter = true;
int iDurchlauf = 0;
int iElement = 0;

int iVglEle = 0;
int iSQLAngelegt = 0;

while (jZähler < aListKey.size()) {
if (iDurchlauf == 0) {
iElement = jZähler;
} else {
iElement = jZähler - (iMaxSätzeAufEinmal * iDurchlauf);
}

// System.out.println("iDurchlauf: " + iDurchlauf + " iElemente: "
// + iElement + " jZähler: " + jZähler);

sAusgabenTabelle[iElement][0] = (String) aListKey.get(jZähler); // sKeyAusgaben
sAusgabenTabelle[iElement][1] = (String) aListBudat.get(jZähler); // sBudat
sAusgabenTabelle[iElement][2] = (String) aListWgrnr.get(jZähler); // sWgrnr
sAusgabenTabelle[iElement][3] = (String) aListBetrag.get(jZähler); // sBetrag
sAusgabenTabelle[iElement][4] = (String) aListText.get(jZähler); // sText
sAusgabenTabelle[iElement][5] = (String) aListDatanl.get(jZähler); // sDatanl
sAusgabenTabelle[iElement][6] = (String) aListDataend.get(jZähler); // sDataend

jZähler++;

iVglEle = iElement + 1;

if (iVglEle >= iMaxSätzeAufEinmal) {
// Insert in der Datenbank durchführen
iDurchlauf++; // nächste Durchlauf nach dem Insert

try {
iSQLAngelegt = iSQLAngelegt
+ DatenbankAufrufe.getInstance()
.InsertAusgabenTabelle(sAusgabenTabelle);

} catch (Exception e1) {

e1.printStackTrace();
System.out.println("Fehler Ausgaben laden");
JOptionPane.showMessageDialog(getParent(),
"Error Datenbank Ausgaben laden");

// Verarbeitete Tabelle inhaltlich löschen
// Array Tabelle inhaltlich löschen Start
int z = 0;
while (z < iMaxSätzeAufEinmal) {
sAusgabenTabelle[z][0] = null;
sAusgabenTabelle[z][1] = null;
sAusgabenTabelle[z][2] = null;
sAusgabenTabelle[z][3] = null;
sAusgabenTabelle[z][4] = null;
sAusgabenTabelle[z][5] = null;
sAusgabenTabelle[z][6] = null;
z++;
}
}

// Ein Paket wurde erfolgreich in die Datenbank eingefügt
// Array Tabelle inhaltlich löschen Start
int z = 0;
while (z < iMaxSätzeAufEinmal) {
sAusgabenTabelle[z][0] = null;
sAusgabenTabelle[z][1] = null;
sAusgabenTabelle[z][2] = null;
sAusgabenTabelle[z][3] = null;
sAusgabenTabelle[z][4] = null;
sAusgabenTabelle[z][5] = null;
sAusgabenTabelle[z][6] = null;
z++;
}
// Array Tabelle inhaltlich löschen Ende

}
}

// Anzahl der Sätze aus der Datei nicht durch iMaxSätzeAufEinmal
// teilbar.
// Hier werden die restlichen in die Datenbank gebracht.
if (sAusgabenTabelle.length > 0) {
try {

iSQLAngelegt = iSQLAngelegt
+ DatenbankAufrufe.getInstance().InsertAusgabenTabelle(
sAusgabenTabelle);

// System.out.println("Insgesamt geladen " + iSQLAngelegt);
// System.out.println("Sätze gesamt Datei " + aListKey.size());

} catch (Exception e1) {
// TODO Automatisch erstellter Catch-Block
e1.printStackTrace();
System.out.println("Fehler Ausgaben laden");
JOptionPane.showMessageDialog(getParent(),
"Error Datenbank Ausgaben laden");

}

String sMeldung = "Eingabedatei_____________ " +sDateiname
+ "\n Sätze mit Inhalt___________ " + aListKey.size()
+ "\n Leere Sätze_____________ " +iLeereElemente++
+ "\n Sätze auf einmal laden_____ " +iMaxSätzeAufEinmal
+ "\n In der Datenbank angelegt__ " + iSQLAngelegt;

JOptionPane.showMessageDialog(getParent(), sMeldung);

}
}

private static Component getParent() {
// TODO Automatisch erstellter Methoden-Stub
return null;
}
}
 
Wenn es Performant sein soll, wieso benutzt du dann keine Datenbank?
Bei vielen einträgen ist das immer noch am schnellsten.
 
Zurück