Avatar billede nanders Nybegynder
07. december 2010 - 14:03 Der er 10 kommentarer

Importere tal fra excel til Java

Kære eksperter,

Jeg ønsker at importere tal fra excel og ind i et java program.

Tallene, ca. 2000, er i cellerne A1 til A2000.

Tallet i celle A1, skal ind i variablen Butene1, tallet i celle A2 skal i variablen Butene2 osv.

Butene1 skal bruges videre i nogle beregninger - og det skal Butene2 osv. også - så det er noget med et array eller lignende, hvor tallene først skal lægges ind og som man derefter kan tilgå.

VH.

nanders
Avatar billede arne_v Ekspert
07. december 2010 - 14:21 #1
Der er to muligheder for at tilgaa Excel fra Java:
* JDBC-ODBC bridge og ODBC driver for Excel
* Apache POI
Avatar billede fsconsult.dk Nybegynder
07. december 2010 - 14:38 #2
Jeg vil anbefale at bruge POI hvis det er andet end simpel udtrækning af et par enkelte felter.
Avatar billede nanders Nybegynder
07. december 2010 - 15:08 #3
Hej Arne oa.

Jeg arbejder i BlueJ, og er ikke ekspert, så det skal være det mest simple.

Har du et kodeeksempel liggende?

vh.

nanders
Avatar billede arne_v Ekspert
07. december 2010 - 15:12 #4
Gamle eksempler fra 2004:

import java.sql.*;

public class ReadXLS {
  public static void main(String[] args) throws Exception {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      Connection con = DriverManager.getConnection("jdbc:odbc:;Driver={Microsoft Excel Driver (*.xls)};Dbq=C:\\jtest.xls;");
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT * FROM [Sheet1$]");
      while (rs.next()) {
        int iv = rs.getInt(1);
        String sv = rs.getString(2);
        System.out.println(iv + " " + sv);
      }
      stmt.close();
      con.close();
  }
}


import java.io.*;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.*;

public class ReadPOI {
  public static void main(String[] args) throws Exception {
      POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("C:\\jtest.xls"));
      HSSFWorkbook wb = new HSSFWorkbook(fs);
      HSSFSheet sheet = wb.getSheetAt(0);
      int rownum = 1;
      for (;;) {
        HSSFRow row = sheet.getRow(rownum);
        if(row==null) break;
        HSSFCell ivcell = row.getCell((short)0);
        int iv = (int)ivcell.getNumericCellValue();
        HSSFCell svcell = row.getCell((short)1);
        String sv = svcell.getStringCellValue();
        System.out.println(iv + " " + sv);
        rownum++;
      }
  }
}
Avatar billede nanders Nybegynder
07. december 2010 - 15:49 #5
Det øverste program ovenfor compiler dog, det nederste gør ikke.

Hvis der i excelarket (jtest.xls) er 3 værdier i cellerne A1, A2 og A3, hvordan får jeg så adgang til disse værdier inde i java?

Og kan jeg bare indsætte nedenstående, fra

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

i mit eksisterende java program - og hvor kommer værdierne fra celle A1, A2 og A3 så til at ligge?

Værdierne i A1, A2 og A3 er af typen double og ikke af typen string - kan det lade sig gøre?

import java.sql.*;

public class ReadXLS {
  public static void main(String[] args) throws Exception {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      Connection con = DriverManager.getConnection("jdbc:odbc:;Driver={Microsoft Excel Driver (*.xls)};Dbq=C:\\jtest.xls;");
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT * FROM [Sheet1$]");
      while (rs.next()) {
        int iv = rs.getInt(1);
        String sv = rs.getString(2);
        System.out.println(iv + " " + sv);
      }
      stmt.close();
      con.close();
  }
}
Avatar billede arne_v Ekspert
07. december 2010 - 15:51 #6
Det nederste program kraever POI.
Avatar billede arne_v Ekspert
07. december 2010 - 15:52 #7
eksmeplet laese kolonne A og B (alle raekker) - du skal tilrette til dit behov
Avatar billede nanders Nybegynder
07. december 2010 - 16:00 #8
Har du mulighed for at forklare hvor man:

a) definerer at den kun skal hente kolonne A i excel arket?
b) definerer hvad der sker med indholdet i celle A1, A2 og A3?
c) Om man behøver det med 'String sv' og 'int iv'
d) Og om det er rigtigt forstået at man fylder et array op med tal fra regnearket og dette array hedder rs?

Vh

nanders
Avatar billede arne_v Ekspert
07. december 2010 - 17:22 #9
re a)

Proev med:

SELECT a FROM ...

re b)

Det koder du selv.

re c)

Du henter det med rs.getXxx(kolonnenummer) og kan goere hvad di vil med data.

re c)

rs er et ResultSet ikke et array.
Avatar billede arne_v Ekspert
26. december 2010 - 23:40 #10
Tid at få afsluttet her?
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