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 API là JXL 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 |
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
















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?
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ó.
Chào,
Tôi thích hướng dẫn của bạn.
Manish
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 đề
Hi Avijit,
Bạn có thể dán mã nguồn bạn đang sử dụng.
Hitesh Agarwal
Hi Hitesh,
Hướng dẫn, người đàn ông rất tốt đẹp. Keep it up
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
Great hướng dẫn, thx một lottt ...
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.
Xls rất tốt đẹp đọc mã .. thanx rất nhiều.
rất tốt đẹp hướng dẫn, excel fro đọc. Cảm ơn
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.
hi, nếu tệp excel có 18bm, làm thế nào để đọc?
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?
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?
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.
Suresh hitesh,
hi Hitesh,
Hi hitesh,
Các hướng dẫn đã được giúp đỡ của g8
Cảm ơn
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
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
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.
@ 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?
@ 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!
cảm ơn cho hướng dẫn của bạn ^ _ ^
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!
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.
Được rất hữu ích ... tuyệt vời làm việc
@ 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