Otwieranie pliku xls z programu Java

0

Cześć witam!
Zrobiłam mały programik, ktory za pomocą showSaveDialog i FileOutputStream zapisuje mi dane wyciągniete z tabeli Oracle do pliku xls. Teraz chciałabym zrobic nastepujaca rzecz: zaraz po tym jak plik zostanie zapisany na dysku, otworzyc go. Jednak nie chce uzywac showOpenDialog i zeby uzytkownik musial wybierac jaki plik otworzyc. Plik powinien otworzyc sie zaraz po jego zapisaniu. Czy istnieje jakaś biblioteka do obsługi plikow xls? Jestem dość swieza w tym temacie, wiec prosze o jakas podpowiedz.
Z gory bardzo dziekuje.

0

Bardzo ciekawy temat :), mogła być coś więcej napisać jak zapisywałaś do pliku, by zachować format xsl?? Jest jakiś tutorial w Internecie?

0

A jak można by zapisać do plików OpenOffica? Znalazłem coś odnośnie odb: http://forum.java.sun.com/thread.jspa?threadID=5143442&messageID=9530620, ale nie mam nic odnośnie ods :(

0

hmm, a czy jest mozliwosc formatowania i wstawiania wykresow?

pozdrawiam

0

Czesc!
Programik ktory zrobilam jest dosc prosty, byl mi po prostu potrzebny jako element w Forms 6.0 oracle zeby wyrzucic raport w formacie innym niz txt.
Zadanie bylo takie: wyciagnac z bazy selectem pewnie informacje a nastepnie zrucenie ich do pliku Excel, zapisanie go na dysku i od razu wyswietlenie. Jestem dosc "swieza" w Java wiec pewnie moje rozwiazanie jest dosc sztubackie, i bedzie 'razic" w oczy ludzi, ktorzy maja Jave w jedym paluszku :/ Wiem juz takze jak takiego Excela natychmiast otworzyc.
Czyli:

 

.......................
                         Object numer;
		Object grupa;
		Object nazwa;
		Object jm;
		Object zaklad;
		Object data_bada;
		Object wynik;
		float blad_zewn;
		float blad_wew;
		float bl_miesz;
		Object zakres1;
		Object zakres2;
		Object wart_dop;
		Object wart_dop2;
		Object temp;
		Object wilg;

		String data_badania = bledy_jp.data_bad.getText();
		String numer_id = bledy_jp.numer_inw.getText();

		boolean exists = (new File("C:\\temp\\blad.xls")).exists();

		if (exists == true) {

			JOptionPane.showMessageDialog(null, "Plik juz istnieje");

			fc = new JFileChooser();
			fc.setCurrentDirectory(sciezka);
			int wpis = fc.showSaveDialog(frame);
			fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
			if (wpis == JFileChooser.APPROVE_OPTION) {
				file = fc.getSelectedFile();
				plik = file.toString() + ".xls";

				Connection conn;
				Statement stmt;
				String driver = "jdbc:oracle:thin:";
				String host = "10.........";
				String port = "1521";
				String SERVICE_NAME = "ZEUS";
				String uzyt = "ops$wiesiek";
				String password = "plaz";
				String sql = "select........";

Sprawdzam czy istnieje juz taki plik na dysku, jesli nie to wywoluje dialog i uzytkownik sam okresla gdzie zapisac,wyciagam dane z bazy ktore mnie interesuja....

ResultSet rset;
				String connString = driver + "@" + host + ":" + port + ":"
						+ SERVICE_NAME;

				try {
					DriverManager
							.registerDriver(new oracle.jdbc.driver.OracleDriver());
					conn = DriverManager.getConnection(connString, uzyt,
							password);
					stmt = conn.createStatement();
					rset = stmt.executeQuery(sql);

					while (rset.next()) {

						numer = rset.getObject(1);
						grupa = rset.getObject(2);
						nazwa = rset.getObject(3);
						jm = rset.getObject(4);
						zaklad = rset.getObject(5);
						data_bada = rset.getString(6);
						wynik = rset.getString(7);
						blad_zewn = rset.getFloat(8);
						blad_wew = rset.getFloat(9);
						bl_miesz = rset.getFloat(10);
						zakres1 = rset.getString(11);
						zakres2 = rset.getString(12);
						wart_dop = rset.getString(13);
						wart_dop2 = rset.getString(14);
						temp = rset.getString(15);
						wilg = rset.getString(16);

						try {

							String path = plik;

							FileOutputStream strim = new FileOutputStream(path,
									true);
							wy = new PrintWriter(strim);

							wy.println("Numer" + "\t" + "Grupa" + "\t"
									+ "Nazwa" + "\t" + "Jednostka" + "\t"
									+ "Zaklad" + "\t" + "Data badania" + "\t"
									+ "Wynik" + "\t" + "Blad zewn" + "\t"
									+ "Blad wew" + "\t" + "Blad miesz" + "\t"
									+ "Zakres 1" + "\t" + "Zakres 2" + "\t"
									+ "Wartosc dop" + "\t" + "Wartosc dop2"
									+ "\t" + "Temp" + "\t" + "Wilg" + "\t");
							wy.println(numer + "\t" + grupa + "\t" + nazwa
									+ "\t" + jm + "\t" + zaklad + "\t"
									+ data_bada + "\t" + wynik + "\t"
									+ blad_zewn + "\t" + blad_wew + "_" + "\t"
									+ bl_miesz + "\t" + zakres1 + "\t"
									+ zakres2 + "\t" + wart_dop + "\t"
									+ wart_dop2 + "\t" + temp + "\t" + wilg
									+ "\t" + "\n");

							wy.close();

						} catch (FileNotFoundException e1) {

							e1.printStackTrace();
						}

					}
					rset.close();
					stmt.close();
					conn.close();
					try {

						Runtime.getRuntime()
								.exec(
										"rundll32 SHELL32.DLL,ShellExec_RunDLL "
												+ plik);

					} catch (RuntimeErrorException e) {

					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.exit(0);
				}

A poleceniem Runtime.getRuntime.exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+ plik); wywoluje plik.
O to mi chodzilo. Podkreslam to rozwiazanie jest tylko na moje potrzeby i nie jest w ogóle profesjonalne :-)
Pozdrawiam

0

Postanowilem nie otwierac nowego watku wiec pisze tutaj
Na rynku istnieje kilka darmowych bibliotek do manipulacni plikami excela .xls min:
POI-HSSF
JexcelAPI
oraz korzystajaca z POI
JXL
osobiscie testowalem dwie pierwsze i moje spostrzezenia sa nastepujace:
JExcelAPI jest przyjemna w obsludze (choc miala kikla brakow), lecz kompletnie nie radzi sobie w sytuacji, kiedy w pliku znajduje sie wykres! (w dowolnym arkuszu!) - wiec niestety odpada w wiekszosci sytuacji.
Moja przygode zaczalem wlasnie od tej biblioteki, gdyz o POI chodzilo wiele glosow, ze jest skomplikowana, ze powoduje przepelnienia stosu i takie tam.
Niestety (a moze i na szczescie) z powodow wyzej wymienionych postanowilem sprobowac POI i... wcale nie jest trudniejsza niz JexcelAPI a za to doskonale radzi sobie z obrazkami, wykresami i rysowaniem! poza tym jest znacznie wieksze mozliwosci!
Konkluzja jest taka - jesli ktos zastanawialby sie nad wybraniem biblioteki - polecam wlasnie POI.

pozdrawiam</url>

1 użytkowników online, w tym zalogowanych: 0, gości: 1