Avatar billede touel Nybegynder
01. marts 2005 - 11:43 Der er 21 kommentarer og
1 løsning

Java og Excel

Hej jeg kunne godt tænke mig at vide, at hvis jeg skal kunne trække info fra en Excel ark, hvilke klasser kan jeg så bruge fra Java.
Avatar billede arne_v Ekspert
01. marts 2005 - 11:50 #1
Jeg kender ihvertfald 2 muligheder:
  JDBC ODBC
  Apache POI
Avatar billede arne_v Ekspert
01. marts 2005 - 11:51 #2
Eksempler:

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();
  }
}

og:

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 touel Nybegynder
01. marts 2005 - 12:17 #3
dvs at fremgangsmåden med at hente eller indsætte data i excel er på samme måde som med db... ok... takker arne
Avatar billede touel Nybegynder
01. marts 2005 - 12:25 #4
Ligger du et svar arne....
Avatar billede arne_v Ekspert
01. marts 2005 - 12:35 #5
Næsten den samme !

Og svar.
Avatar billede touel Nybegynder
01. marts 2005 - 12:38 #6
Hov ikk så hurtig arne...normalt sir man jo "create table" - for at kunne indsætte noget i db. men hvad gør jeg for at indsætte noget i excel, og for den sags skyld også kunne trække noget ......
Avatar billede arne_v Ekspert
01. marts 2005 - 12:41 #7
Udtræk er vist ovenfor.

Eksempler på indsæt:

import java.sql.*;

public class WriteXLS {
  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)};READONLY=FALSE;Dbq=C:\\test.xls;");
      Statement stmt = con.createStatement();
      stmt.executeUpdate("CREATE TABLE t (f1 INTEGER, f2 VARCHAR(50), f3 VARCHAR(50), f4 VARCHAR(50))");
      stmt.executeUpdate("INSERT INTO t VALUES(3,'hest','ko','hund')");
      stmt.executeUpdate("INSERT INTO t VALUES(4,'hest2','ko2','hund2')");
      stmt.close();
      con.close();
  }
}

og:

import java.io.*;

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

public class WritePOI {
  public static void main(String[] args) throws Exception {
      HSSFWorkbook book = new HSSFWorkbook();
      HSSFSheet sheet = book.createSheet("Test Sheet");
      sheet.setSelected(true);
      HSSFRow hdrrow = sheet.createRow((short)0);
      HSSFCell hdrrowcola = hdrrow.createCell((short)0);
      hdrrowcola.setCellValue("F1");
      HSSFCell hdrrowcolb = hdrrow.createCell((short)1);
      hdrrowcolb.setCellValue("F2");
      for(int i = 0; i < 10; i++) {
          HSSFRow datarow = sheet.createRow((short)(i+1));
          HSSFCell datacola = datarow.createCell((short)0);
          datacola.setCellValue(i+1);
          HSSFCell datacolb = datarow.createCell((short)1);
          datacolb.setCellValue("Dette er en test");
      }
      sheet.setColumnWidth((short)1, (short)(50*256));
      FileOutputStream f = new FileOutputStream("C:\\jjtest.xls");
      book.write(f);
      f.close();
  }
}
Avatar billede kalp Novice
01. marts 2005 - 12:54 #8
hmm bruger man også JDBC ODBC,Apache POI hvis man skal have i word? fx indsætte text i word fra java? (sorry for spam)
Avatar billede arne_v Ekspert
01. marts 2005 - 12:59 #9
Jeg mener ikke at der findes en ODBC driver til Word, så JDBC ODBC kan
man ikke bruge.

POI har også et modul til Word, men det er vistnok ikke nær så færdigt som
det til Excel.

Java er ikke det optimale til at snakke med Microsofts kontor programmer med.
Avatar billede touel Nybegynder
01. marts 2005 - 13:11 #10
arne jeg får følgende fejl... jeg har oprettet et jtest.xls fil på C: drevet... Men den klager over den linie hvor man opretter forbindelse til Excel....

java.sql.SQLException: [Microsoft][ODBC Excel Driver] External table is not in the expected format.
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at db.main(db.java:9)
Exception in thread "main"
Avatar billede touel Nybegynder
01. marts 2005 - 13:33 #11
Det er denne linie den klager over :

Connection con = DriverManager.getConnection("jdbc:odbc:;Driver={Microsoft Excel Driver (*.xls)};Dbq=C:/jtest.xls;");
Avatar billede arne_v Ekspert
01. marts 2005 - 13:40 #12
Er det en valid Excel fil ?
Avatar billede touel Nybegynder
01. marts 2005 - 13:43 #13
ikke forstået... jeg gik ind på C: drevet, højreklikkede, valgte en genvejs fil, og omdøbte den til jtest.xls fil....
Avatar billede touel Nybegynder
01. marts 2005 - 14:44 #14
I den første eks., skriver du ved ResultSet [Sheet1$]... skal jeg skrive det samme, eller skal jeg skrive et andet navn her ???
Avatar billede arne_v Ekspert
01. marts 2005 - 14:52 #15
Jeg mener at det er default i engelsk Excel.

Det hedder sikkert Ark1$ eller sådan noget i dansk Excel.
Avatar billede arne_v Ekspert
01. marts 2005 - 15:02 #16
Og filen skal være selve regnearket
Avatar billede touel Nybegynder
01. marts 2005 - 15:44 #17
suk.. det er det også... jeg har også prøvet forskellige tutorials fra nettet for at få det op at stå... jeg arbejder i Eclipse, mon ikk jeg skal have importeret det som en JAR fil, før programmet vil acceptere det og køre videre ???
Avatar billede arne_v Ekspert
01. marts 2005 - 22:13 #18
Du behøver ikke nogen jar fil for at bruge JDBC ODBC bridgen.

Hvilken fejl får du nu ?
Avatar billede touel Nybegynder
01. marts 2005 - 23:08 #19
den klager stadig over Connection con - sætningen... den kan ikke læse jtest.xls filen...
Avatar billede arne_v Ekspert
01. marts 2005 - 23:10 #20
Kan vi få den præcise fejl ?
Avatar billede touel Nybegynder
02. marts 2005 - 10:25 #21
jeg har droppet at oprette forbindelse til Excel. jeg vil i stedet lave den om til en csv.fil, og læse ind vha vector.
Avatar billede touel Nybegynder
02. marts 2005 - 15:30 #22
En funktion som kan lave alle excel filer om til csv filer....
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