Java Excel - Reading Excel-blad i Java

Av någon anledning hittade jag Apache POI svår att använda för att läsa Excel-blad, när det gäller namngivning och koden så jag leta efter en annan för att läsa Excel-blad i Java och jag stannade på JXL.

Java Excel API nämligen JXL är ett Java-baserade API som tillåter oss att läsa / skriva / redigera Excel-blad. De viktigaste tror jag tyckte om det var dess enkelhet över Apache POI Package. Denna artikel kommer att visa dig hur vi kan läsa Excel-blad med JXL.

Nu här jag kommer att läsa ett Excel-blad med innehåll:

EmpId Namn Utseende
1 ABC Software Engineer
2 DFG Sr Software Engineer
3 LOI Teamledare
4 LKJ Projektledare
5 Qwe Software Architech

Din e-post:


Jag har lagt upp samma Excel-blad på servern kan du hämta den här: Ladda ner Excel-blad

  1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 ; import java.io.FileInputStream ; import java.io.IOException ; import java.io.InputStream ; import java.util.Locale ; import jxl.Cell ; import jxl.Sheet ; import jxl.Workbook ; import jxl.WorkbookSettings ; import jxl.read.biff.BiffException ; import jxl.DateCell ; public class ReadXLSheet { public void init ( String filePath ) { FileInputStream fs = null ; try { fs = new FileInputStream ( new File ( filePath ) ) ; contentReading ( fs ) ; } catch ( IOException e ) { e. printStackTrace ( ) ; } catch ( Exception e ) { e. printStackTrace ( ) ; } finally { try { fs. close ( ) ; } catch ( IOException e ) { e. printStackTrace ( ) ; } } } //Returns the Headings used inside the excel sheet public void getHeadingFromXlsFile ( Sheet sheet ) { int columnCount = sheet. getColumns ( ) ; for ( int i = 0 ; i < columnCount ; i ++ ) { System . out . println ( sheet. getCell ( i, 0 ) . getContents ( ) ) ; } } public void contentReading ( InputStream fileInputStream ) { WorkbookSettings ws = null ; Workbook workbook = null ; Sheet s = null ; Cell rowData [ ] = null ; int rowCount = '0' ; int columnCount = '0' ; DateCell dc = null ; int totalSheet = 0 ; try { ws = new WorkbookSettings ( ) ; ws. setLocale ( new Locale ( "en" , "EN" ) ) ; workbook = Workbook. getWorkbook ( fileInputStream, ws ) ; totalSheet = workbook. getNumberOfSheets ( ) ; if ( totalSheet > 0 ) { System . out . println ( "Total Sheet Found:" + totalSheet ) ; for ( int j = 0 ; j < totalsheet ; j ++ ) { System . out . println ( "Sheet Name:" + workbook. getSheet ( j ) . getName ( ) ) ; } } //Getting Default Sheet ie 0 s = workbook. getSheet ( 0 ) ; //Reading Individual Cell getHeadingFromXlsFile ( s ) ; //Total Total No Of Rows in Sheet, will return you no of rows that are occupied with some data System . out . println ( "Total Rows inside Sheet:" + s. getRows ( ) ) ; rowCount = s. getRows ( ) ; //Total Total No Of Columns in Sheet System . out . println ( "Total Column inside Sheet:" + s. getColumns ( ) ) ; columnCount = s. getColumns ( ) ; //Reading Individual Row Content for ( int i = 0 ; i < rowCount ; i ++ ) { //Get Individual Row rowData = s. getRow ( i ) ; if ( rowData [ 0 ] . getContents ( ) . length ( ) != 0 ) { // the first date column must not null for ( int j = 0 ; j < columnCount ; j ++ ) { switch ( j ) { case 0 : System . out . println ( "Employee Id:" + rowData [ j ] . getContents ( ) ) ; case 1 : System . out . println ( "Employee Name:" + rowData [ j ] . getContents ( ) ) ; case 2 : System . out . println ( "Employee Designation:" + rowData [ j ] . getContents ( ) ) ; default : break ; } } } } workbook. close ( ) ; } catch ( IOException e ) { e. printStackTrace ( ) ; } catch ( BiffException e ) { e. printStackTrace ( ) ; } } public static void main ( String [ ] args ) { try { ReadXLSheet xlReader = new ReadXLSheet ( ) ; xlReader. init ( "/home/hitesh/Desktop/test.xls" ) ; } catch ( Exception e ) { e. printStackTrace ( ) ; } } } import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Locale; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.WorkbookSettings; import jxl.read.biff.BiffException; import jxl.DateCell public class ReadXLSheet (public void init (String FilePath) (FileInputStream fs = null; try (FS = new FileInputStream (ny fil (FilePath)); contentReading (FS);) catch (IOException e) (e. printStackTrace ();) catch (Exception e) (e. printStackTrace ();) slutligen (try (fs. close ();) catch (IOException e) (e . printStackTrace ();))) / / Returnerar de rubriker som används inne i Excel-blad public void getHeadingFromXlsFile (Tunnplåt) (int AntalKolumner = plåt. getColumns () for (int i = 0; i <AntalKolumner, i + +) (System. out. println (sheet. getCell (i, 0). getContents ());)) public void contentReading (InputStream fileInputStream) (WorkbookSettings var = null; arbetsbok arbetsboken = null; Sheet s = null; Cell rowData [] = null; int rowCount = '0 '; int AntalKolumner = '0'; DateCell DC = null; int totalSheet = 0; try (var = new WorkbookSettings (); var. setlocale (nytt Locale ( "en", "EN" )); arbetsbok = arbetsbok. getWorkbook (fileInputStream, var); totalSheet = arbetsbok. getNumberOfSheets () if (totalSheet> 0) (System. out. println ( "Totalt Sheet Found:" + totalSheet) for (int j = 0; j <totalsheet j + +) (System. out. println ( "Sheet Name:" + arbetsbok. getSheet (j). getName ());)) / / Getting Standard Sheet dvs 0 s = arbetsbok. getSheet ( 0), / / Reading enskild cell getHeadingFromXlsFile (s), / / Summa Totalt antal rader i blad, kommer du tillbaka några rader som är upptagna med något datasystem. out. println ( "Totalt antal rader inne Sheet:" + s . getRows ()); rowCount = s. getRows (), / / Summa Totalt antal kolumner i Sheet System. out. println ( "Totalt Kolumn inne Sheet:" + s. getColumns ()); AntalKolumner = s. getColumns ( ) / / avläsa enstaka Row Innehållet for (int i = 0; i <rowCount, i + +) (/ / hämta enskilda Row rowData = s. getRow (i) if (rowData [0]. getContents (). längd ()! = 0) (/ / det första datumkolumnen inte får null for (int j = 0; j <AntalKolumner j + +) (switch (j) (case 0: System. out. println ( "Employee Id: "+ rowData [j]. getContents ()); Fall 1: System. out. println (" Employee Name: "+ rowData [j]. getContents ()); Fall 2: System. out. println (" Employee Designation: "+ rowData [j]. getContents ()); default: break;)))) arbetsbok. close ();) catch (IOException e) (e. printStackTrace ();) catch (BiffException e) (e. printStackTrace ( );)) public static void main (String [] args) (try (ReadXLSheet xlReader = new ReadXLSheet (); xlReader. init ( "/ home / hitesh / Desktop / test.xls");) catch (Exception e) ( e. printStackTrace ();))) 
  Totalt Sheet Found: 3
 ----------------------------------------------
 Sheet Namn: Blad1
 Sheet Namn: Sheet2
 Sheet Namn: Sheet3
 ----------------------------------------------
 Kolumn Rubrik: EmpId
 Kolumn Rubrik: Namn
 Kolumn Rubrik: Utseende
 ----------------------------------------------
 Totalt antal rader inne Sheet: 6
 ----------------------------------------------
 Totalt Kolumn inne Sheet: 3
 ----------------------------------------------
 Employee Id: EmpId
 Employee Namn: Namn
 Employee Utseende: Utseende
 ----------------------------------------------
 Anställnings-ID: 1
 Employee Namn: ABC
 Employee Utseende: Software Engineer
 ----------------------------------------------
 Anställnings-ID: 2
 Employee Namn: DFG
 Employee Designation: Sr Software Engineer
 ----------------------------------------------
 Employee Id: 3
 Employee Namn: LOI
 Employee Utseende: Team Leader
 ----------------------------------------------
 Employee Id: 4
 Employee Namn: LKJ
 Employee Designation: Project Manager
 ----------------------------------------------
 Employee Id: 5
 Employee Namn: Qwe
 Employee Utseende: Software Architect 

När det gäller följande kod skriven jag kan utföra följande operation:

  • Beräkna totala ingen ark inne i Excel-blad
  • Lista alla Sheet Namn användas inne i Excel-blad
  • Läs enskild cell för att ange cell position - i grupp har läst kolumnrubriken dvs Rad 1
  • Läs Total Ändrad rader i Excel-blad
  • Läs Total Ändrad kolumner i Excel-blad
  • Läs Enskilda Row Content

Custom Search


Populära artiklar:

Tags: Kategorier: Java Taggar:
  1. 26 december 2008 at 10:05 | # 1

    Om jag har att skriva den här koden med hjälp av POI, att utföra de uppgifter som du har gjort, skulle koden ha varit ganska likartade med mycket likartade API-anrop. Jag ser svårigheterna som de mer eller mindre samma jämfört med POI. Min fråga är hur detta skiljer sig från sevärdhet?

  2. December 28, 2008 at 22:36 | # 2

    Hej Surya,
    Skillnad medföljer namnkonventionen används. JXL är enbart används för Excel i Java. När som i Apache POI finns det olika projekt ut för olika Microsoft Office-filer, t.ex. HWPF, HSSF, HPSF etc. Nu som utvecklare måste du kontrollera vilka en om för Excel Parsing, ladda ner paketet och sedan genomföra den.

  3. 2 Januari 2009 at 11:58 | # 3

    Hej,
    Jag gillade din handledning.
    Manish

  4. Avijit
    6 januari 2009 kl 04:10 | # 4

    det finns ett problem samtidigt ha flera ark i xls-fil. Jag vill accsess flera ark värden på en gång, men det returnerar ovelap värde av två ark.

    men handledningen är för bra.
    plz lösa problemet

  5. 6 januari 2009 kl 04:44 | # 5

    Hej Avijit,
    Kan du klistra in källkoden du använder.

    Hitesh Agarwal

  6. Vivek Mittal
    11 januari 2009 kl 14:08 | # 6

    Hej Hitesh,
    Very nice tutorial mannen. Keep it up

  7. Abhishek
    18 februari 2009 kl 07:55 | # 7

    Hej Hitesh,

    Nice work man. Jag hade en fråga. Är det möjligt att skriva makron i Excel i Java och utföra dessa makron när du arbetar på kalkylbladet.

    Tack
    Abhi

  8. seeraz
    29 Maj 2009 kl 02:41 | # 8

    Great tutorial, thx en lottt ...

  9. Moha
    2 juni 2009 kl 07:38 | # 9

    Hej,

    Först och främst, tack för den läraren.
    Jag har ett problem. Jag har hämtat API men jag vet inte var du ska spara det i Eclipse. Anledningen är att jag putted de uppackade filerna i API i plugin-mappen men programmet du gav som exempel fortfarande frågar efter jxl.
    Kan ni hjälpa?
    Tack.

  10. Rohan
    September 1, 2009 at 04:40 | # 10

    Very nice xls läsa koden .. thanx a lot.

  11. barakha
    2 september 2009 kl 01:30 | # 11

    very nice tutorial fro excel läsning. Tack

  12. Uma
    September 10, 2009 at 21:19 | # 12

    hur man läser data från Excel-fil med kolumnnamn.
    Säg till exempel,
    Ort Land
    Chennai Indien
    Mumbai Indien
    Behöver läsas med kolumnen ort, land.
    Please help me out.

  13. Qing
    13 Oktober 2009 kl 18:06 | # 13

    Hej, Om Excel-filen har 18bm, hur man läsa?

  14. id
    15 oktober 2009 kl 13:17 | # 14

    hej ..
    Jag försöker köra yr program men den håller på att ge mig fel java version 50,0 borde vara 49,0.

    Dosent JXL arbeta med Java 1.5?
    Låt mig veta om det finns anythign IM saknas?

  15. James Zhao
    23 Oktober 2009 kl 14:36 | # 15

    Hur kan vi infoga en ny rad på bladet?
    Hur kan vi kopiera den befintliga raden format till en ny rad?

  16. Swamy
    28 Oktober 2009 kl 06:03 | # 16

    Hej Hitesh,

    Nice bibliotek, keep it up, till nytta för människor.
    Hur kan vi infoga en ny rad på bladet?
    Hur kan vi kopiera den befintliga raden format till en ny rad?

    Rgds
    Swamy.

  17. Suresh
    30 oktober 2009 kl 22:31 | # 17

    Suresh hitesh,

      Fint exempel.  Tutorial är mycket bra.
     Jag har ett problem med att läsa data från Excel-blad, om det Excel-blad uppgifterna inte är från första kolumnen.  Om Excel-blad data inte är i tablar form
     sedan hur man läser data från Excel-blad. 
  18. Suresh
    30 oktober 2009 kl 22:47 | # 18

    Hej Hitesh,

      Jag havae ett problem med läsning
     data från Excel Sheet.If Excel-blad
     Data är inte i tabler form sedan hur
     läsa data.  Jag kör samma exempel men det
     stiger ArrayIndexOutOfBounds undantag.
     Plz Tell The lösning på detta problem .....
    
  19. divs
    10 november 2009 kl 05:31 | # 19

    Hej hitesh,
    Handledningen var av G8-hjälp

    Tack

  20. Ganesh
    10 november 2009 kl 23:23 | # 20

    Hej Hitesh,

    Jag fick följande undantag när jag försökte köra ReadXLSheet.java.

    jxl.read.biff.BiffException: Det går inte att känna igen OLE ström
    på jxl.read.biff.CompoundFile. (CompoundFile.java: 116)
    på jxl.read.biff.File. (File.java: 127)
    på jxl.Workbook.getWorkbook (Workbook.java: 268)
    på com.sample.ReadXLSheet.contentReading (ReadXLSheet.java: 65)
    på com.sample.ReadXLSheet.init (ReadXLSheet.java: 30)
    på com.sample.ReadXLSheet.main (ReadXLSheet.java: 20)

    Vad kan vara orsaken till detta.

    Inledningsvis fick jag följande undantag när jag försökte köra ReadXLSheet.java.

    java.lang.UnsupportedClassVersionError: Bad versionsnumret i. klassfilen

    Senare har jag följt den jexcelapi_2_6_12 källa med min JVM och använde genererade burken. Nu jag inte får detta fel men jag får
    jxl.read.biff.BiffException. kanna fullständig behag hjälpa mig att lösa denna fråga.

    tack,
    Ganesh

  21. 14 november 2009 kl 10:04 | # 21

    Hej Ganesh,
    Har inte stött på detta fel. Måste kolla upp det.

    Tack,
    Hitesh Agarwal

  22. 30 november 2009 kl 23:03 | # 22

    Hej Hitesh,
    Thanku för ur kommentarer och handledning.
    Jag har ett problem med Excel-blad.
    Jag har två Excel-blad, båda är på samma system.
    Om jag ändrar i ett Excel-blad, då det påverkar den andra Excel-blad.
    Jag kan pinga andra system och kan skicka meddelandet till andra system med hjälp av socket programmering.
    men jag har ingen aning om hur du uppdaterar Excel-blad som finns på andra system som samma IM gör när Excel-ark i samma system.

    Please reply ASAP

    Tack på förhand.

  23. Deepak Sharma
    30 december 2009 kl 00:16 | # 23

    @ Ganesh

    Kontrollera om ur använder. Xlsx istället för. Xls
    Jag får detta undantag (gick inte att känna igen OLE ström) om jag använder ny xlsx fil.
    Så använder jexcelapi_2_6_12 löser xlsx format problemet?

  24. Swagata
    6 januari 2010 kl 21:56 | # 24

    @ Ganesh

    Kontrollera om filen test.xls blockeras .. Högerklicka och välj Egenskaper. Om den är blockerad, låsa upp det .. Vissa säkerhetsfunktion i Windows som blockerar en del hämtade filer tills du låsa upp dem .. Prova om detta hjälper!

  25. 7 januari 2010 kl 00:36 | # 25

    Tack för din handledning ^ _ ^

  26. CAG
    22 januari 2010 kl 12:18 | # 26

    Tack så mycket, arbetade jag på ett problem där jag behövde strigel xls-fil (400 +) - endast en gång. Du räddade mig dagen med denna burk!

  27. Roshan Khandelwal
    31 januari 2010 kl 23:57 | # 27

    Hi everyone,
    Koden fungerar ganska bra med en förändring.

    Efter varje fall uttalande lägga en "paus"
    så den reviderade koden är:

    switch (j) (
    Vid 0:
    System.out.println ( "Employee ID:" + rowData [j]. GetContents ());
    break;
    Fall 1:
    System.out.println ( "Employee Name:" + rowData [j]. GetContents ());
    break;
    case 2:
    System.out.println ( "Employee Designation:" + rowData [j]. GetContents ());
    break;
    default:
    break;
    )

    Med koden för given, den loopar genom alla tre skick och ger en felaktig utgång.
    Tack för koden.

  1. Inga trackback ännu.