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 |
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
















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?
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.
Hej,
Jag gillade din handledning.
Manish
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
Hej Avijit,
Kan du klistra in källkoden du använder.
Hitesh Agarwal
Hej Hitesh,
Very nice tutorial mannen. Keep it up
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
Great tutorial, thx en lottt ...
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.
Very nice xls läsa koden .. thanx a lot.
very nice tutorial fro excel läsning. Tack
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.
Hej, Om Excel-filen har 18bm, hur man läsa?
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?
Hur kan vi infoga en ny rad på bladet?
Hur kan vi kopiera den befintliga raden format till en ny rad?
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.
Suresh hitesh,
Hej Hitesh,
Hej hitesh,
Handledningen var av G8-hjälp
Tack
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
Hej Ganesh,
Har inte stött på detta fel. Måste kolla upp det.
Tack,
Hitesh Agarwal
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.
@ 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?
@ 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!
Tack för din handledning ^ _ ^
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!
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.