Java Excel - Đọc Excel Sheet trong Java

Đối với một số lý do i hàng Apache POI khó để sử dụng cho việc đọc bảng excel, trong điều khoản của công ước đặt tên và mã số như vậy, tôi đã được tìm kiếm một thư viện để đọc Excel sheet trong Java và tôi dừng lại tại JXL.

Java Excel APIJXL là một Java dựa trên API cho phép chúng tôi đọc / ghi / sửa các sheet Excel. Các chính tôi thích nghĩ về nó là đơn giản của nó trên Apache POI gói. Bài viết này sẽ cho bạn thấy làm thế nào chúng ta có thể đọc bằng cách sử dụng Excel Sheet JXL.

Bây giờ ở đây i am sẽ đọc một bảng excel có nội dung:

EmpId Tên Designation
1 ABC Kỹ sư phần mềm
2 Dfg Sr Software Engineer
3 LỢI Trưởng nhóm
4 Lkj Quản lý dự án
5 QWE Phần mềm KIẾN TRÚC

Email của bạn:


Tôi đã tải lên cùng một tấm excel trên máy chủ bạn có thể tải nó từ đây: Download Excel Sheet

  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 ( ) ; } } } nhập khẩu java.io.File; nhập khẩu java.io.FileInputStream; nhập khẩu java.io.IOException; nhập khẩu java.io.InputStream; nhập khẩu java.util.Locale; nhập khẩu jxl.Cell; nhập khẩu jxl.Sheet; jxl.Workbook nhập khẩu; nhập khẩu jxl.WorkbookSettings; nhập khẩu jxl.read.biff.BiffException; jxl.DateCell nhập khẩu; công cộng lớp ReadXLSheet (public void init (String filePath) (FileInputStream fs = null; try (fs = FileInputStream mới (new File (filePath)); contentReading (fs);) catch (IOException e) (e. printStackTrace ();) catch (Exception e) (e. printStackTrace ();) finally (try (fs đóng ();) catch (IOException e) (e. . printStackTrace ();))) / / nhận các đề mục được sử dụng trong excel sheet getHeadingFromXlsFile void công cộng (Sheet sheet) (columnCount int = tờ. getColumns (); for (int i = 0; i <columnCount; i + +) (hệ thống. ra. println (sheet. getCell (i, 0). getContents ());)) public void contentReading (InputStream FileInputStream) (WorkbookSettings được = null; Workbook workbook = null; Sheet s = null; rowData Cell [] = null; int ROWCOUNT = '0 '; int columnCount = '0'; DateCell dc = null; int totalSheet = 0; thử (được = WorkbookSettings mới (); đã setlocale (. mới Locale ( "en", "EN" )); (workbook = Workbook. getWorkbook FileInputStream, đã được); totalSheet = workbook. getNumberOfSheets (); nếu (totalSheet> 0) (System. ra. println ( "Tổng số Sheet Found:" + totalSheet); cho int j (= 0; j <totalsheet; i + +) (System. ra. println ( "Sheet Tên:" + workbook. getSheet (k). getName ());)) / / Bắt Default Sheet tức là 0 s = workbook. getSheet ( 0); / / Reading riêng Cell getHeadingFromXlsFile (s); / / Total Không Of Rows ở Sheet, bạn sẽ trở lại không có các dòng đang bận với một số dữ liệu hệ thống. ra. println ( "Total Rows bên trong Sheet:" + s . getRows ()); ROWCOUNT = s. getRows (); / / Total Không Of Cột trong Bảng hệ thống. ra. println ( "Tổng số cột bên trong Sheet:" + s. getColumns ()); columnCount = s. getColumns ( ); / / Reading riêng Row Nội dung for (int i = 0; i <ROWCOUNT; i + +) (/ / Get rowData Row riêng = s. getRow (i); nếu (rowData [0]. getContents (). dài () = 0) (/ / cột ngày đầu tiên không phải null for (int j = 0; j <columnCount; i + +) (switch (k) (case 0: Hệ thống. ra. println ( "Employee Id: "+ rowData [j] getContents ()); trường hợp 1: Hệ thống.. ra. println (" Employee Name: "+ rowData [j] getContents ()); trường hợp 2: Hệ thống.. ra. println (" Employee đặt hàng: "+ 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 = mới ReadXLSheet (); xlReader. init ( "/ home / hitesh / Desktop / test.xls");) catch (Exception e) ( e. printStackTrace ();))) 
  Tổng số Sheet Found: 3
 ----------------------------------------------
 Tên sheet: Sheet1
 Bảng Tên: Sheet2
 Bảng Tên: Sheet3
 ----------------------------------------------
 Cột Heading: EmpId
 Cột Tựa đề: Tên
 Cột Heading: Designation
 ----------------------------------------------
 Tổng số Hàng bên trong Sheet: 6
 ----------------------------------------------
 Tổng số cột bên trong Sheet: 3
 ----------------------------------------------
 Nhân viên ID: EmpId
 Nhân viên Tên: Tên
 Nhân viên đặt hàng: Công thức đặt
 ----------------------------------------------
 Mã nhân viên: 1
 Nhân viên Tên: ABC
 Nhân viên đặt hàng: Kỹ sư phần mềm
 ----------------------------------------------
 Mã nhân viên: 2
 Nhân viên Tên: dfg
 Nhân viên đặt hàng: Sr Software Engineer
 ----------------------------------------------
 Mã nhân viên: 3
 Nhân viên Tên: LỢI
 Nhân viên đặt hàng: Trưởng nhóm
 ----------------------------------------------
 Mã nhân viên: 4
 Nhân viên Tên: lkj
 Nhân viên đặt hàng: Quản lý dự án
 ----------------------------------------------
 Mã nhân viên: 5
 Nhân viên Tên: QWE
 Nhân viên đặt hàng: Kiến trúc sư phần mềm 

Đối với các mã sau bằng văn bản i am có thể thực hiện thao tác sau đây:

  • Tính toán tổng số không có các tấm bên trong các Sheet Excel
  • Danh sách tất cả các tên Sheet được sử dụng bên trong Excel Sheet
  • Đọc riêng cho di động xác định vị trí của tế bào - trong mã đã đọc các tiêu đề cột tức là 1 hàng
  • Đọc Tổng Modified Rows trong Excel Sheet
  • Đọc Tổng Modified Cột trong Sheet Excel
  • Đọc cá nhân Row Nội dung

Tìm kiếm Tuỳ chỉnh


Phổ biến các điều:

Tags: Thể loại: Java Tags:
  1. Ngày 26 tháng 12 năm 2008 at 10:05 | # 1

    Nếu tôi phải viết mã này sử dụng POI, để thực hiện các tác vụ mà bạn đã thực hiện, các mã có thể đã được khá tương tự rất giống với các cuộc gọi API. Tôi thấy mức độ khó khăn như nhiều hơn hay ít như nhau khi so sánh với POI. Câu hỏi của tôi là làm thế nào là điều này khác với POI?

  2. 28 Tháng Mười Hai 2008 lúc 22:36 | # 2

    Hi Surya,
    Sự khác biệt đi kèm với các gói quy ước đặt tên được sử dụng. JXL là hoàn toàn được sử dụng cho Excel trong Java. Trong trường hợp như trong Apache POI có những dự án khác nhau làm cho Microsoft Office tập tin khác nhau, Ví dụ HWPF, HSSF, HPSF vv hàng như là một nhà phát triển, bạn phải kiểm tra xem cái nào nếu cho Excel Parsing, tải về các gói và sau đó thực hiện nó.

  3. 02 tháng 1 2009 lúc 11:58 | # 3

    Chào,
    Tôi thích hướng dẫn của bạn.
    Manish

  4. Avijit
    Ngày 6 tháng 1 năm 2009 lúc 4:10 | # 4

    có một vấn đề trong khi có nhiều tờ trong tập tin xls. i muốn accsess giá trị tờ cùng một lúc, nhưng nó trả về một giá trị ovelap của hai tờ.

    hướng dẫn, nhưng là quá tốt.
    plz giải quyết vấn đề

  5. Ngày 6 tháng 1 năm 2009 lúc 04:44 | # 5

    Hi Avijit,
    Bạn có thể dán mã nguồn bạn đang sử dụng.

    Hitesh Agarwal

  6. Vivek Mittal
    Tháng 1 11, 2009 at 14:08 | # 6

    Hi Hitesh,
    Hướng dẫn, người đàn ông rất tốt đẹp. Keep it up

  7. Abhishek
    Ngày 18 tháng 2 năm 2009 lúc 7:55 | # 7

    Hi Hitesh,

    Nice work man. Tôi đã có một câu hỏi. Có thể ghi các macro của Excel trong Java và thực hiện các macro trong khi làm việc trên bảng tính.

    Cảm ơn
    Abhi

  8. seeraz
    Tháng Năm 29, 2009 at 02:41 | # 8

    Great hướng dẫn, thx một lottt ...

  9. Moha
    Ngày 02 tháng 6 năm 2009 lúc 7:38 | # 9

    Chào,

    Trước tiên, cảm ơn bạn đã hướng dẫn.
    Tôi đã là một vấn đề. Tôi đã tải về các api nhưng tôi không biết được nơi để lưu nó vào thực. Lý do là tôi putted các tập tin Unzipped của api vào thư mục plugin nhưng chương trình mà bạn đã cung cấp một ví dụ như vẫn còn yêu cầu JXL.
    Xin giúp đỡ?
    Cảm ơn.

  10. Rohan
    Ngày 1 tháng 9 năm 2009 lúc 4:40 | # 10

    Xls rất tốt đẹp đọc mã .. thanx rất nhiều.

  11. barakha
    02 tháng 9 2009 lúc 01:30 | # 11

    rất tốt đẹp hướng dẫn, excel fro đọc. Cảm ơn

  12. Uma
    10 Tháng Chín 2009 lúc 21:19 | # 12

    làm thế nào để đọc dữ liệu từ tệp excel bằng cách sử dụng tên cột.
    Nói cho các ví dụ như,
    Địa điểm Quốc gia
    Chennai Ấn Độ
    Mumbai Ấn Độ
    Cần đọc bằng cách sử dụng Đặt cột, Quốc gia.
    Xin hãy giúp tôi ra ngoài.

  13. qing
    13 Tháng 10 năm 2009 lúc 18:06 | # 13

    hi, nếu tệp excel có 18bm, làm thế nào để đọc?

  14. id
    15 Tháng Mười 2009 lúc 13:17 | # 14

    hey ..
    Tôi cố gắng để chạy chương trình năm nhưng nó vẫn không ngừng đem lại cho tôi phiên bản java sai 50,0 nên được 49,0.

    Dosent JXL làm việc với Java 1.5?
    Hãy cho tôi biết nếu có thiếu anythign im?

  15. James Triệu
    Ngày 23 tháng 10 2009 lúc 14:36 | # 15

    Làm thế nào chúng ta có thể chèn một hàng mới vào bảng "?
    Làm thế nào chúng ta có thể sao chép các định dạng hàng hiện có để một hàng mới?

  16. Swamy
    Ngày 28 Tháng 10 2009 lúc 06:03 | # 16

    Hi Hitesh,

    Nice thư viện, giữ cho nó lên, hữu ích cho người dân.
    Làm thế nào chúng ta có thể chèn một hàng mới vào bảng "?
    Làm thế nào chúng ta có thể sao chép các định dạng hàng hiện có để một hàng mới?

    Rgds
    Swamy.

  17. suresh
    Ngày 30 tháng 10 năm 2009 lúc 22:31 | # 17

    Suresh hitesh,

      Ví dụ tốt đẹp.  Hướng dẫn, là rất tốt.
     Tôi có một vấn đề với đọc dữ liệu từ Excel Sheet, nếu Excel Sheet dữ liệu không phải là bắt đầu từ cột đầu tiên.  nếu Excel dữ liệu không phải là một hình thức tablar
     sau đó làm thế nào để đọc dữ liệu từ Excel Sheet. 
  18. suresh
    Ngày 30 tháng 10 năm 2009 lúc 22:47 | # 18

    hi Hitesh,

      Tôi havae một trong những vấn đề với đọc
     dữ liệu từ Excel Sheet.If các sheet Excel
     Dữ liệu không phải là một hình thức tabler thì làm thế nào để
     đọc dữ liệu.  Tôi chạy Ví dụ tương tự nhưng nó
     tăng ArrayIndexOutOfBounds Ngoại lệ.
     Plz Giới thiệu Giải pháp cho vấn đề này .....
    
  19. divs
    Ngày 10 Tháng Mười Một 2009 lúc 5:31 | # 19

    Hi hitesh,
    Các hướng dẫn đã được giúp đỡ của g8

    Cảm ơn

  20. Ganesh
    Ngày 10 tháng 11 2009 lúc 23:23 | # 20

    Hi Hitesh,

    Tôi đã nhận ngoại trừ sau khi tôi đã cố gắng chạy ReadXLSheet.java.

    jxl.read.biff.BiffException: Không thể nhận ra dòng OLE
    tại jxl.read.biff.CompoundFile. (CompoundFile.java: 116)
    tại jxl.read.biff.File. (File.java: 127)
    tại jxl.Workbook.getWorkbook (Workbook.java: 268)
    tại com.sample.ReadXLSheet.contentReading (ReadXLSheet.java: 65)
    tại com.sample.ReadXLSheet.init (ReadXLSheet.java: 30)
    tại com.sample.ReadXLSheet.main (ReadXLSheet.java: 20)

    Những gì có thể là lý do cho việc này.

    Ban đầu tôi có những ngoại lệ sau đây khi tôi đã cố gắng chạy ReadXLSheet.java.

    java.lang.UnsupportedClassVersionError: Tình trạng trong số phiên bản. lớp tập

    Sau đó tôi tuân thủ các nguồn jexcelapi_2_6_12 với JVM của tôi và sử dụng các jar tạo ra. Bây giờ tôi không nhận được lỗi này nhưng tôi đang nhận
    jxl.read.biff.BiffException. u có thể xin hãy giúp tôi giải quyết vấn đề này.

    cảm ơn,
    ganesh

  21. Ngày 14 tháng mười một năm 2009 at 10:04 | # 21

    Hi Ganesh,
    Đã không gặp phải lỗi này. Sẽ phải kiểm tra điều này.

    Cảm ơn,
    Hitesh Agarwal

  22. Ngày 30 Tháng 11 2009 lúc 23:03 | # 22

    Hi Hitesh,
    Thanku cho ý kiến ur và hướng dẫn.
    Tôi có một vấn đề liên quan đến excel sheet.
    i có hai tấm excel, Cả hai đều ở cùng một hệ thống.
    nếu tôi làm thay đổi trong một bảng excel, sau đó nó ảnh hưởng đến bảng excel khác.
    i am có thể ping hệ thống khác và có thể gửi tin nhắn hệ thống khác bằng cách sử dụng lập trình socket.
    nhưng tôi không có ý tưởng làm thế nào để cập nhật excel tờ mà là trên các hệ thống khác như là im cùng làm khi excel tấm tại cùng một hệ thống.

    Xin vui lòng trả lời ASAP

    Cảm ơn trước.

  23. Deepak Sharma
    Ngày 30 tháng 12 2009 lúc 00:16 | # 23

    @ Ganesh

    Kiểm tra nếu ur xlsx thay vì sử dụng.. Xls
    Tôi có được ngoại lệ này (Không thể nhận ra dòng OLE) nếu tôi sử dụng tập tin xlsx mới.
    Vì vậy, bằng cách sử dụng jexcelapi_2_6_12 sẽ giải quyết vấn đề định dạng xlsx?

  24. Swagata
    06 tháng 1 năm 2010 lúc 21:56 | # 24

    @ Ganesh

    Kiểm tra xem tập tin test.xls bị chặn .. Nhấp chuột phải và vào bất động sản. Nếu nó bị chặn, bỏ cấm nó .. Một số tính năng bảo mật trong Windows rằng các khối một số tập tin đã tải về cho đến khi bạn bỏ cấm họ .. Hãy thử nếu điều này sẽ giúp!

  25. 7 tháng 1 năm 2010 lúc 00:36 | # 25

    cảm ơn cho hướng dẫn của bạn ^ _ ^

  26. Tháng 1 22, 2010 at 12:18 | # 26

    cảm ơn bạn rất nhiều, tôi đã làm việc trên một vấn đề mà tôi cần thiết để tập tin xls da liếc dao cạo (400 +) - chỉ có một thời gian. Bạn lưu tôi ngày với JAR này!

  27. Roshan Khandelwal
    Ngày 31 tháng một năm 2010 lúc 23:57 | # 27

    Chào tất cả mọi người,
    Mã này hoạt động khá tốt với một trong những thay đổi.

    Sau khi tuyên bố mỗi trường hợp thêm một break ""
    vì vậy mã sửa đổi sẽ là:

    switch (k) (
    trường hợp 0:
    System.out.println ( "Employee Id:" + rowData [j]. GetContents ());
    break;
    trường hợp 1:
    System.out.println ( "Employee Name:" + rowData [j]. GetContents ());
    break;
    Trường hợp 2:
    System.out.println ( "Employee Designation:" + rowData [j]. GetContents ());
    break;
    mặc định:
    break;
    )

    Với mã như đã cho, nó vòng qua tất cả các điều kiện ba và cho sản lượng có sai sót.
    Thanks for the code.

  28. Paramjit
    Ngày 18 tháng 2 năm 2010 lúc 03:26 | # 28

    Được rất hữu ích ... tuyệt vời làm việc

  29. Manjunath
    Ngày 15 tháng 3 năm 2010 lúc 11:41 | # 29

    @ Ganesh

    Tôi nhận được lỗi tương tự như Ganesh nhận. Tập tin của tôi được lưu như xls và. Là cấm, nhưng vẫn nhận được cùng một BiffException.Please giúp

  1. Không có Trackbacks nêu ra.