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/thr[...]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, botów: 0