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.
Bardzo ciekawy temat :), mogła być coś więcej napisać jak zapisywałaś do pliku, by zachować format xsl?? Jest jakiś tutorial w Internecie?
Np Jakarta POI http://jakarta.apache.org/poi
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 :(
hmm, a czy jest mozliwosc formatowania i wstawiania wykresow?
pozdrawiam
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
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>