2013-04-25 16 views
8

Khi tôi đang đọc file Excel (định dạng .xls), tôi tiếp tục nhận được một ngoại lệ:java.lang.IllegalArgumentException: InputStream của bạn là không phải một dòng OLE2, và cũng không một dòng OOXML

java.lang.IllegalArgumentException: Your Input Stream was neither an OLE 2 stream, nor an OOXML stream. 

tôi Go- ogled và thấy rằng nếu dòng đầu vào không hỗ trợ thiết lập lại hoặc đánh dấu, tôi nên quấn nó với pushbackStream. Luồng đầu vào của tôi không được hỗ trợ đánh dấu \ reset.

Vì vậy, sử dụng pushbackStream là tùy chọn duy nhất? Làm thế nào để sử dụng nó? Và whats việc sử dụng nó?

Cảm ơn

+1

Bạn có chắc tệp của mình thực sự là tệp .xls của Excel không? Và không phải, giả sử, tệp .csv hoặc .html có phần mở rộng đã thay đổi chưa? – Gagravarr

+0

Không, tệp .xls của Excel. – mee

+0

Vui lòng cung cấp SSCCE của bạn. –

Trả lời

4
Your InputStream was neither an OLE2 stream, nor an OOXML stream 
java.lang.IllegalArgumentException: Your InputStream was neither an OLE2 stream, nor an OOXML stream 

Tôi đoán bạn đang sử dụng Workbook Factory HOẶC một tập tin định dạng đầu vào khác nhau và loại bảng tính khác nhau. Lỗi này thường xuất hiện khi không thể đọc được loại tệp. Apache POI không kiểm tra phần mở rộng của tệp. Nếu bạn mở nó trong một trình soạn thảo văn bản, bạn sẽ thấy rằng thay vào đó nó sẽ ở định dạng khác. Hoặc bạn có thể đang khởi tạo loại sổ làm việc thành HSSF hoặc XSSF, trước khi sử dụng Workbook Factory.

đơn giản là giải pháp để mở tập tin sử dụng Microsoft Excel và lưu nó như một tập tin khác (sử dụng File> Save Như tùy chọn từ Microsoft Excel> Menu).

Workbook Factory không kiểm tra phần mở rộng của tệp, Thay vào đó nó sẽ kiểm tra loại tệp MIME. Về cơ bản, Excel hoạt động với các tệp khác nhau (ví dụ: các tệp được tạo bằng các ứng dụng của bên thứ ba, phiên bản excel 2003), nhưng Apache POI rất cụ thể.

PushbackInputStream thêm chức năng "đẩy lùi" hoặc "chưa đọc" vào luồng đầu vào khác. Nó cho phép bạn đọc trước một vài byte để xem những gì đang đến, trước khi bạn có thể xác định cách diễn giải byte hiện tại.

Nếu bạn không sử dụng Workbook Factory, PushbackInputStream là lựa chọn duy nhất tôi đoán.

Nếu bạn có thể chia sẻ mã ở đây, tôi có thể kiểm tra và xác nhận lại mã đó.

+0

Đề xuất của bạn không giúp ích cho tôi: ( –

+0

Tôi có thể giúp bạn nếu bạn có thể cho tôi biết chi tiết về lỗi. –

+0

Cảm ơn bạn, Nhưng tôi không nhớ vấn đề.Tôi đã giải quyết nó! :) –

Các vấn đề liên quan