HSSFWorkbook als Return-Wert für Input in andere Methode

astramare

Mitglied
wie / kann man das wb als type oder String aus der Methode in eine andere übergeben / übernehmen?

Hintergrund: ich will aus oracle heraus einzelne Zellen anhand extern vorliegender Zuordnungen für Zeile / Spalte / Sheet auslesen, dies funktioniert ,
wobei jedoch jedesmal per url-Stream usw. das gesamte wb geöffnet, die eine Zelle ausgelesen dann das wb / fs wieder geschlossen und der Zellwert in der DB mit einer vorhandenen procedure verarbeitet wird.

um bei der nachfolgenden Abfrage wieder alles zu öffnen , auszulesen , und zu schließen.
Dies braucht logischerweise viel Zeit.

Gibt es also einen Weg, das wb einmal zu öffnen, dann jeweils bestimmte Zellen auszulesen wobei jedesmal die Zeile / Spalte / sheet extra übergeben werden können
und zum Ende gesamt das wb/ fs zu schliessen.

die println - ausgabe des wb als String ( siehe unten ) erzeugt soetwas wie
"org.apache.poi.hssf.usermodel.HSSFWorkbook@9ac5d3f6"
dies müsste bei einem geöffneten wb doch weiter verarbeitbar sein , oder ?


public static String StartNow_OpenUrl ( String URLPath ) throws SQLException
{
Connection conn = DriverManager.getConnection("jdbc:default:connection:");

String RetWb = "null";


String remoteURL = new String(URLPath);

try
{
URL url = new URL(remoteURL);
InputStream is = url.openStream();

POIFSFileSystem fs = new POIFSFileSystem( is );
HSSFWorkbook wb = new HSSFWorkbook(fs);

// anzeige zb:
// 100 StartNow_OpenUrl wb= org.apache.poi.hssf.usermodel.HSSFWorkbook@9ac5d3f6
System.out.println("100 StartNow_OpenUrl wb= "+wb );

//is.close();


}

catch (Throwable ew) {
ew.printStackTrace(System.out);
}


//return wb ;
return "wb" ; // normaler String wird ok zurück gegeben

}
 

nrg

Top Contributor
das Ganze vllt nicht statisch programmieren.
Eine Klasse, die im Konstuktor die Connection etc. als Attribute initialisiert und eine doIt() und eine close() Methode.
Methoden- und Variablennamen (ausser Konstanten) schreibt man übrigens klein
 

astramare

Mitglied
danke, heisst dies, dass auf das Objekt wb eine nicht-statische Methode gesetzt wird
in der Art callNonstatic / doSomething ( s. unten )


public static void startNow ( String urlpath ) throws SQLException
{
Connection conn = DriverManager.getConnection("jdbc:default:connection:");

String remoteURL = new String(urlpath);

try
{
URL url = new URL(remoteURL);
InputStream is = url.openStream();

POIFSFileSystem fs = new POIFSFileSystem( is );
HSSFWorkbook wb = new HSSFWorkbook(fs);
System.out.println("100 tt wb= "+wb );
}
catch (Throwable ew) {
ew.printStackTrace(System.out);
}
}


public static String getCellValue( HSSFCell cell , String cellType )
{
String str;
// funktionierender Code für return Cell-Value als String ....

return str ;
}

public static String callNonstatic ( String sheetName, int pCol, int pRow )
{
wb.doSomething();
// auslesen wb ? return ?
return ?? ;
}

public String doSomething()
{
// nicht-statische Methode

System.out.println( "Hallo " );

// auslesen wb ?
// ...
String RetCellValue = "null";
HSSFSheet sheet = wb.getSheet(sheetName);
HSSFRow Row = sheet.getRow(pRow);
HSSFCell Cell = Row.getCell((short)pCol);
RetCellValue = getCellValue(Cell, cellType ) ;

return RetCellValue ;
}

// ---------------------------------------------------------

ich habe jetzt ( als 'Anfänger' ) eine menge dazu gelesen und probiert,
doch ist mir nicht klar, wie bekomme ich wb nach callNonstatic
und wenn, wie bekomme ich den returnwert zurück,
den ich ja haben will ?
 

nrg

Top Contributor
kann dir jetzt nicht mit einem kompilierbaren beispiel dienen aber kann dir mal zeigen, wie ich das meine (vllt verstehe ich dich auch falsch)

Java:
public class DeineConnection {
	
	private Connection conn;
	// Deine weiteren Attribute
	// private POIFSFileSystem fs;
	// private HSSFWorkbook wb;
	
	public static void main(String[] args) throws SQLException {
		DeineConnection dc = new DeineConnection( "bla" );
		dc.doSomething(); // Zeile lesen
		dc.doSomething(); // Zeile lesen
		dc.doSomething(); // Zeile lesen
		dc.doSomething(); // Zeile lesen
		dc.doSomething(); // Zeile lesen
		dc.doSomething(); // Zeile lesen
		dc.close();
	}
	public DeineConnection( String urlpath ) throws SQLException {
		this.conn = DriverManager.getConnection("jdbc:default:connection:");
		// fs und wb etc. intialisieren
		// ....
	}
	public String doSomething() {
		// blablabla
		return "deineZeile";
	}
	public void close() throws SQLException {
		conn.close();
	}

}

ausserdem benutze bitte javatags
 

astramare

Mitglied
ja, es ist denke ich etwas anders gedacht,


alles zusammen über einen einzigen aufruf funktioniert,
das habe ich vorliegen,jedoch

der weitere hintergrund ist der,
dass es eine vorhandene programmmstruktur in plsql gibt,
aus der die excelverarbeitung angesprochen wird,
dies soll ( in einem ersten schritt ) möglichst 1:1 auf java umgestellt werden,
dh. die klassen / methoden - aufrufe werden in plsql - funktionen gekapselt
und so per plsql aufgerufen.

es sollen also folgende drei insofern eigenständige schritte
( plsql bzw. methoden-aufrufe ) abgebildet werden:

1. öffnen des stremas / wb
( eigenständige erster plsql-aufruf / klasse / methode )

2.1 auslesen einer zelle
( über eine zweiter plsql-aufruf / klasse / methode,
wobei auf den geöffneten wb aus 1 zugegriffen wird )

ggf. weitere aufrufe zum auslesen einer zelle
2.2 ... 2.x


3. schliessen des wb / streams
( eigenständige dritter plsql-aufruf / klasse / methode )


ich will also die unten stehende methode GetCellValueJava 'auseinander teilen' ,
wobei der bezug auf fs und wb untereinander erhalten bleiben muss.

Java:
  public static String GetCellValueJava ( String pUrlPath, String pSheetName , int pCol , int pRow , String pCellType  )throws SQLException
  {
    //Connection conn =   DriverManager.getConnection("jdbc:default:connection:");
    
    // erster schritt:
    String retCellValue = "null";
  	String remoteURL = new String(pUrlPath);

      try
      {
        URL             url   = new URL(remoteURL);
        InputStream     is    = url.openStream();

		POIFSFileSystem fs 	  = new POIFSFileSystem(is);
		HSSFWorkbook    wb 	  = new HSSFWorkbook(fs);

		//----------------------------------------------------------------
		// anfang auslagern als autonome methode / klasse / plsql-funktion
		//
		// verfahrens-stand dieser klasse / methode ist, dass jeweils für eine cell-abfrage der gesamte wb
		// geladen, die eine zelle ausgelesen und der gesamte wb wieder geschlossen wird
		// dies funktioniert aus forms/plsql heraus ok, dauert jedoch und logischerweise sehr lange ;-(
		//
		// da die umgebung ( vorerst ) beibehalten werden soll wäre das ziel
		// ziel: einmaliges öffnen des wb
		// nacheinander auslesen über forms/plsql-funktion jeweils einer einzelnen zelle auf basis des ( bereits ) geöffneten wb
		// und somit innerhalb einer session
		// zum schluss wieder schließen des wb / stream
		//
		// zweiter schritt(e):
		// ------------------------------------------------------------------------
		HSSFCell cell = wb.getSheet(pSheetName).getRow(pRow).getCell((short) pCol);
 		retCellValue  = getCellValue(cell, pCellType ) ;
		// ------------------------------------------------------------------------
 		//
 		// ende auslagern als autonome methode / klasse / plsql-funktion
 		// --------------------------------------------------------------
          
 		// dritter schritt :
        is.close();
      }
	  catch (Throwable ew) {
	  ew.printStackTrace(System.out);
	  }
    return retCellValue;
  }
}
 

astramare

Mitglied
ich habe die Anforderungen lösen können, letztendlich in dieser form ( Ausschnitt der Klasse )

Java:
// ....
  private static FileInputStream fis;
  private static InputStream     is;
  private static POIFSFileSystem fs;
  private static HSSFWorkbook    wb;
  private static HSSFSheet       sh;
  private static HSSFRow         rw;
  private static HSSFCell        cl;


  // öffnen xls-Datei aus dem File-System :
  public static HSSFWorkbook excelStartNowFile (String pFilePath )throws SQLException
  {
    //Connection conn =   DriverManager.getConnection("jdbc:default:connection:");
      try
      {
      fis = new FileInputStream(pFilePath);
      fs  = new POIFSFileSystem(fis);
	  wb  = new HSSFWorkbook(fs);

      }
	  catch (Throwable ew) {
	  ew.printStackTrace(System.out);
	  }
    return wb ;
  }
  
//  .....

  // aufruf auslesen einer einzelnen zelle aus sheet, spalte, zeile und datenTyp :
  public static String GetCellValue ( String pSheetName , int pCol , int pRow , String pCellType  )throws SQLException
  {
    //Connection conn =   DriverManager.getConnection("jdbc:default:connection:");
    String retCellValue = "null";
      try
      {

		 cl = wb.getSheet(pSheetName).getRow(pRow).getCell((short) pCol);
		 retCellValue  = getCellValue(cl, pCellType ) ;   // extra methode getCellValue 

      }
	  catch (Throwable ew) {
	  ew.printStackTrace(System.out);
	  }
    return retCellValue;
  } 

//   ......
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Java Doc mehrere Return Parameter Java Basics - Anfänger-Themen 11
A Return in While Schleife Java Basics - Anfänger-Themen 6
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
I Return Array Java Basics - Anfänger-Themen 4
Q return Ausgabe Java Basics - Anfänger-Themen 4
javapingu Variablenwerte ändern ohne return Statement? Java Basics - Anfänger-Themen 7
C Ausgabe boolean return ((n==9)||(n==0)); Java Basics - Anfänger-Themen 13
G return 1 + methode Java Basics - Anfänger-Themen 4
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
J Missing Return Statement Java Basics - Anfänger-Themen 11
T Return einer anderen Methode herausfinden Java Basics - Anfänger-Themen 9
C ArrayList mit return zurückgeben Java Basics - Anfänger-Themen 13
M kann man return in nur einer Methode einsetzen? Java Basics - Anfänger-Themen 7
V return String[] führt zu [Ljava.lang.String;@50675690 Java Basics - Anfänger-Themen 7
K Return in Schleife Java Basics - Anfänger-Themen 4
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
S Missing return Java Basics - Anfänger-Themen 4
das_leon return message Java Basics - Anfänger-Themen 2
C return kann nicht auf variable zugreifen Java Basics - Anfänger-Themen 26
N Ausführung gibt keinen Fehler an, Return wird aber nicht ausgegeben Java Basics - Anfänger-Themen 22
R return: cannot find symbol Java Basics - Anfänger-Themen 2
R Ratespiel mit Return und einer Eingabe Java Basics - Anfänger-Themen 1
Z Return in While-Schleife Java Basics - Anfänger-Themen 7
N Frage zu this, super und return Java Basics - Anfänger-Themen 13
K ArrayList ausgeben mit return Java Basics - Anfänger-Themen 6
M Return statement Java Basics - Anfänger-Themen 4
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
M Abbrechen Methode ohne return Java Basics - Anfänger-Themen 3
M Methoden Datei einlesen und als return übergeben. Java Basics - Anfänger-Themen 8
L OOP Return Java Basics - Anfänger-Themen 10
L Erste Schritte Frage zu 'return' Java Basics - Anfänger-Themen 4
J Methoden Rekursive Return Methode Java Basics - Anfänger-Themen 2
W Return statement in Methode nur bei if-clause Java Basics - Anfänger-Themen 3
D Methoden Return-Wert wird nicht ausgegeben Java Basics - Anfänger-Themen 3
F Return-Anweisung Java Basics - Anfänger-Themen 2
E Erste Schritte <? super Unterklasse> Return-Typ darf nicht vom Wildcard-Typ sein Java Basics - Anfänger-Themen 5
B OOP Methode mit Array mit return verlassen Java Basics - Anfänger-Themen 8
J Grundsätzliche Frage zu return Types in Methoden Java Basics - Anfänger-Themen 6
G return-wert für eine Methode Java Basics - Anfänger-Themen 1
B Methoden Probleme mit for Schleife und return Java Basics - Anfänger-Themen 5
Q Tastatureingabe direkt nach Eingabe (ohne zwischenzeitliches "Return" o.Ä ) weiterverwenden Java Basics - Anfänger-Themen 1
B Variablen Problem mit return String[] Java Basics - Anfänger-Themen 4
O Per return Run Methode beenden Java Basics - Anfänger-Themen 3
M Arrays als return Value? Java Basics - Anfänger-Themen 2
C Return statement Java Basics - Anfänger-Themen 10
T Boolean Missing return Statement?! Java Basics - Anfänger-Themen 2
Z Methoden return nullprüfung Java Basics - Anfänger-Themen 7
O Java return in Schleife Java Basics - Anfänger-Themen 4
K Was macht hier genau return? Java Basics - Anfänger-Themen 2
G Methoden Was bedeutet return in einer Methode Java Basics - Anfänger-Themen 5
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
K Variablen RETURN in Case-Switch / This method must return a result of type Item Java Basics - Anfänger-Themen 4
K Erste Schritte "return" Problem bei Rekursion Java Basics - Anfänger-Themen 8
R If Verschachtelung und return; Java Basics - Anfänger-Themen 4
M Frage zum return; Befehl Java Basics - Anfänger-Themen 1
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
C Einige Anfängerfragen (Return-Wert, Exception...) Java Basics - Anfänger-Themen 11
S Methoden Return Java Basics - Anfänger-Themen 8
T return-Wert verwenden? Java Basics - Anfänger-Themen 12
T Return eines Int-Werts? Java Basics - Anfänger-Themen 3
W return-Anweisung gibt nichts aus Java Basics - Anfänger-Themen 5
R Return in If Java Basics - Anfänger-Themen 10
S Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen Java Basics - Anfänger-Themen 3
G array return methode Java Basics - Anfänger-Themen 10
L return wird nicht erkannt? Java Basics - Anfänger-Themen 3
J Regex mit Return Java Basics - Anfänger-Themen 3
M Variablen return-array klonen Java Basics - Anfänger-Themen 3
A Methode mit Array als Param --> return Array --> Fehler Java Basics - Anfänger-Themen 3
S Zeichen einlesen ohne Return? Java Basics - Anfänger-Themen 19
P Compiler-Fehler Boolean: Missing Return Statement Java Basics - Anfänger-Themen 4
S probleme mit der return anweisung Java Basics - Anfänger-Themen 20
E Warum wird Methode nicht durch return-Befehl beendet? Java Basics - Anfänger-Themen 3
V Erste Schritte Return ohne Argument Java Basics - Anfänger-Themen 6
I Methoden Missing return statement; Intervallschachtellung Java Basics - Anfänger-Themen 12
S Frage zu Vererbung und return. Java Basics - Anfänger-Themen 4
R return (mehrere floats) Java Basics - Anfänger-Themen 11
E Return String Java Basics - Anfänger-Themen 10
P Methoden Methode ohne return abbrechen? Java Basics - Anfänger-Themen 12
I Return Befehl in Methode Java Basics - Anfänger-Themen 13
M Problem mit boolean. Return nicht erkannt Java Basics - Anfänger-Themen 10
P Return aus For-Schleife Java Basics - Anfänger-Themen 19
S return in GUI ? Java Basics - Anfänger-Themen 12
M This method must return a result of type int Java Basics - Anfänger-Themen 13
F Erste Schritte return (char)toUnsignedInt(value) Java Basics - Anfänger-Themen 2
A Falscher Return-Wert Java Basics - Anfänger-Themen 2
M missing return statement?! Java Basics - Anfänger-Themen 4
L Return Fragen Java Basics - Anfänger-Themen 4
R Nach return() der aufgerufenen Methode wird aufrufende Methode nicht weiter ausgeführt Java Basics - Anfänger-Themen 14
I Null als return obwohl datensatz existiert Java Basics - Anfänger-Themen 12
S this method must return a result of type double Java Basics - Anfänger-Themen 2
V Problem mit return Java Basics - Anfänger-Themen 7
K Return Problem Java Basics - Anfänger-Themen 3
M Fragen zu Methoden (void/return), Übergabe von Parametern Java Basics - Anfänger-Themen 3
M Objekto.Programm. Return-Befehl Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben