Avatar billede krukken Mester
30. november 2004 - 22:38 Der er 25 kommentarer og
1 løsning

Læse og skrive værdi til Excel ark med PIO

Er der nogle der kan hjælpe mig med at finde ud at hvordan man henter værdier i et excel ark via PIO - helt fra bunden?


Hvis man bruger PIO kan man så forvente at alle version efter 95 er understøttet?
Avatar billede arne_v Ekspert
30. november 2004 - 22:41 #1
Mener du via POI ?
Avatar billede arne_v Ekspert
30. november 2004 - 22:43 #2
Hvis ja så lavede jeg engang dette simple eksempel (som kun har 2 kolonner i brug):

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 krukken Mester
30. november 2004 - 22:43 #3
Hhhm yes. Det må jo fortælle lidt om hvor newbi jeg er:-) H

Jeg har været heride: http://tomcat.edu.brock.dk/apache/jakarta/poi/release/

Hvilken af dem skal jeg hente?
Avatar billede arne_v Ekspert
30. november 2004 - 22:45 #5
Nu er det jo usupporteret reverse engineering af Microsofts XLS format, så
der er næppe garanti for noget som helst.

Mit gæt er at 95 XLS læses lige så godt som nyere XLS.
Avatar billede krukken Mester
30. november 2004 - 22:46 #6
Okay - jeg har pakket det ud - hvad gør jeg så nu?
Avatar billede arne_v Ekspert
30. november 2004 - 22:48 #7
Du putter jar filen i classpath for din IDE og så koder du så gnisterne
springer fra tastaturet !
Avatar billede krukken Mester
30. november 2004 - 22:51 #8
Jeg får tre .jar-filer, hvilken skal jeg bruge?

Hvordan ligger man den classpath i IDE?
Avatar billede arne_v Ekspert
30. november 2004 - 22:54 #9
Hvilken IDE bruger du ?
Avatar billede krukken Mester
30. november 2004 - 22:55 #10
Jeg kompiler fra kommandopromthen
Avatar billede arne_v Ekspert
30. november 2004 - 22:55 #11
Du kan godt ligge dem alle 3 ind, men de to med contrib og scratchpad behøver
du formentligt ikke.
Avatar billede arne_v Ekspert
30. november 2004 - 22:57 #12
javac -classpath .;forbandetlangtnavn.jar DitProgram.java
java -classpath .;forbandetlangtnavn.jar DitProgram
Avatar billede krukken Mester
30. november 2004 - 23:03 #13
okay. Jeg har prøver at kompile med -classepath poi-2.5.1-final-20040804, og den kompiler fint, men når jeg kører di program med java opstår der en fejl:
Avatar billede krukken Mester
30. november 2004 - 23:03 #14
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/poifs/
filesystem/POIFSFileSystem
        at ReadPOI.main(ReadPOI.java:8)
Avatar billede arne_v Ekspert
30. november 2004 - 23:04 #15
Kører du med

-classepath .;poi-2.5.1-final-20040804.jar

?
Avatar billede krukken Mester
30. november 2004 - 23:16 #16
c:\>java -classpath .;poi-2.5.1-final-2004
0804 ReadPOI
Exception in thread "main" java.lang.NumberFormatException: You cannot get a num
eric value from a String based cell
        at org.apache.poi.hssf.usermodel.HSSFCell.getNumericCellValue(HSSFCell.j
ava:712)
        at ReadPOI.main(ReadPOI.java:16)
Avatar billede krukken Mester
30. november 2004 - 23:17 #17
Ja - og det virker også fint ud over disse exception - jeg har prøve at indsætte mange forskellige værdier, men det virker som om den ser dem alle som string-values?
Avatar billede arne_v Ekspert
30. november 2004 - 23:18 #18
Mit program forventer første kolonne er integer og anden kolonne er string.
Avatar billede arne_v Ekspert
30. november 2004 - 23:19 #19
Det må du jo rette til så det passer med dit regneark.

Jeg tror også at du har mulighed for at spørge på feltets type.

Der er ret mange klasser og metoder i POI. Læs Java Docs.
Avatar billede krukken Mester
30. november 2004 - 23:20 #20
Ahh - det er fordi det er anden linie - og ikke første linie den læse - nu virker det:-)

Kan man ikke lave et eller andet smart så et java-program kan startes ved klikke på det istedet for skive java eller starte det fre en IDE?
Avatar billede arne_v Ekspert
30. november 2004 - 23:23 #21
Jo

Hvis du pakker dine class filer ned i en jar fil med et manifest med et Main-Class
direktiv så kan du dobbeltklikke på jar filen i Windows Explorer etc.
Avatar billede krukken Mester
30. november 2004 - 23:28 #23
Okay

Hvordan oprettet med  POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("C:\\test.xls")); så der både kan læses og skrives?
Avatar billede arne_v Ekspert
30. november 2004 - 23:30 #24
Jeg har et skriv helt ny XLS eksempel:

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

men jeg har ikke prøvet at opdatere et eksisterende ark.

Prøv og læs i docs !
Avatar billede krukken Mester
30. november 2004 - 23:36 #25
okay - ligger du et svar?
Avatar billede arne_v Ekspert
01. december 2004 - 08:06 #26
ok
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