Avatar billede renolde_dk Nybegynder
09. februar 2003 - 13:58 Der er 7 kommentarer og
1 løsning

Adgang til Excel via applet

Jeg har lavet en applet der skal tilgå et Excel regneark (Excel-filen kan betragtes som en databasefil).
Grunden til at regnearket skal tilgås er at jeg skal benytte den formel der hedder IA() i Excelarket.

Dette er ikke noget problem i sig selv, hvis jeg laver et program, som kører lokalt på computeren.
Problemet kommer når jeg laver en applet og lægger det op på webserveren.
Så jeg har nogle spørgsmål:

1) Er der nogle former for drivere, der skal oploades sammen med classefilerne? Jeg bruger driveren sun.jdbc.odbc.JdbcOdbcDriver

2) Hvordan tilgår min applet Excel (database) filen rent kodemæssigt.

3) Hvordan slår jeg sikkerheden fra, så apletten kan få lov til at skrive til/læse fra Excel (databasen)

Jeg ved godt at det ikke er pænt sikkerhedsmæssigt, at kontakte en fil på serveren fra klienten, men det eneste filen bruges til er at lave en udregning. Og jeg kan ikke lave det i servletter eller JSP da webserveren ikke understøtter dette.


P.S.
Hvis der tilfældigvis er en som kender formlen for IA(interne afkast) i Excel, så vil jeg kunne undgå alt dette. Den skal så programmesres i JAVA, så jeg kan bruge den.

Men jeg har ledet og ledt, men har ikke kunne finde den nogen steder.
Avatar billede arne_v Ekspert
09. februar 2003 - 14:46 #1
1)  sun.jdbc.odbc.JdbcOdbcDriver kan bruges til at accesse
    en ODBC source med. Den er en del af SUN's java kit, så
    hvis browseren kører med SUN JVM, så har de den allerede og
    behøver ikke downloade den. MS JVM ved jeg ikke.

2)  standard JDBC kald.

3)  er vistnok ret bøvlet.

Jeg vil absolut anbefale dig at lave den funktion i ren Java.

Jeg prøver lige at kigge på om jeg kan komme op med noget kode.
Avatar billede arne_v Ekspert
09. februar 2003 - 14:48 #2
Hvad laver den funktion ?  Beregner intern rente for nogle
betalings-strømme ?
Avatar billede renolde_dk Nybegynder
09. februar 2003 - 14:56 #3
ja sådan noget lignende. Jeg har lagt en fil op her http://www.lk-biosciences.dk/renolde/IA.doc som omhandler metoden.
Avatar billede arne_v Ekspert
09. februar 2003 - 15:16 #4
package test;

public class FinCalc {
    private final static double EPS = 0.000001;
    public static void main(String[] args) {
        double x1[] = { -700000, 120000, 150000, 180000, 210000 };
        double x2[] = { -700000, 120000, 150000, 180000, 210000, 260000 };
        double x3[] = { -700000, 120000, 150000 };
        System.out.println(ii(x1, 0.0));
        System.out.println(ii(x2, 0.0));
        System.out.println(ii(x3, -0.01));
    }
    public static double ii(double[] x, double guess) {
        double i = guess;
        while ((pv(x, i) > EPS) || (pv(x, i) < -EPS)) {
            i -= pv(x, i) / dpv(x, i);
        }
        return i;
    }
    public static double pv(double[] x, double i) {
        double m = 1.0;
        double res = 0.0;
        for (int t = 0; t < x.length; t++) {
            res += x[t] / m;
            m *= (1 + i);
        }
        return res;
    }
    private static double dpv(double[] x, double i) {
        return (pv(x, i + EPS) - pv(x, i)) / EPS;
    }
}
Avatar billede arne_v Ekspert
09. februar 2003 - 15:19 #5
ii er din ia.

Bemærk at 1% er 0.01.
Avatar billede renolde_dk Nybegynder
09. februar 2003 - 15:31 #6
Jeg taber lige kæben af beundring.
Det virkede!!!
Takker. Det har jeg siddet og kæmpet med de sidste par dage.
Det gør det lidt lettere end at skulle skabe forbindelse ftra en applet til et regneark der modtager nogle parametre og regner det ud for mig.
Endnu en gang tak .
Avatar billede arne_v Ekspert
09. februar 2003 - 15:32 #7
Jeg pyntede lige lidt:

package test;

public class FinCalc {
    private final static double EPS = 0.000001;
    public static void main(String[] args) {
        double x1[] = { -700000, 120000, 150000, 180000, 210000 };
        double x2[] = { -700000, 120000, 150000, 180000, 210000, 260000 };
        double x3[] = { -700000, 120000, 150000 };
        System.out.println(ii(x1));
        System.out.println(ii(x2));
        System.out.println(ii(x3, -0.10));
    }
    public static double ii(double[] x) {
        return ii(x, 0.00);
    }
    public static double ii(double[] x, double guess) {
        double i = guess;
        while ((pv(x, i) > EPS) || (pv(x, i) < -EPS)) {
            i -= pv(x, i) / dpv(x, i);
        }
        return i;
    }
    public static double pv(double[] x, double i) {
        double m = 1.0;
        double res = 0.0;
        for (int t = 0; t < x.length; t++) {
            res += x[t] / m;
            m *= (1 + i);
        }
        return res;
    }
    private static double dpv(double[] x, double i) {
        return (pv(x, i + EPS) - pv(x, i)) / EPS;
    }
}
Avatar billede arne_v Ekspert
09. februar 2003 - 15:33 #8
Så er guess en optional parameter.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester