2010-02-24 47 views
18

Tôi đang tạo lịch ở dạng excel. Cột 1 là 01.01.2010 (dd.MM.yyyy), Cột 2 là 02.01.2010, v.v.Cách lấy hơn 255 cột trong bảng tính excel bằng cách sử dụng Apache POI 3.6

Đây là mã của tôi:

int day_cell = 0; 

for(int i = 0; i < days.size(); i++) 
{ 
    Date day = days.get(i); 

    HSSFCell cell = row.createCell(day_cell++); 
    cell.setCellValue(day.toString()); 
} 

Khi tôi đến cột 256 POI ném ngoại lệ này:

java.lang.IllegalArgumentException: Invalid column index (256). Allowable column range for BIFF8 is (0..255) or ('A'..'IV') 
at org.apache.poi.hssf.usermodel.HSSFCell.checkBounds(HSSFCell.java:926) 
at org.apache.poi.hssf.usermodel.HSSFCell.<init>(HSSFCell.java:162) 
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:141) 
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:119) 

Tôi thấy điều này lỗi-báo cáo cho thấy nó đã được cố định trong phiên bản 3.6. Chúng tôi đã sử dụng 3,5 nhưng thay đổi để 3,6 dường như không làm bất kỳ tốt. Có ai có lời khuyên nào không?

https://issues.apache.org/bugzilla/show_bug.cgi?id=46806

Edit: Có vẻ như lỗi-vấn đề là về công thức ..

+0

Tôi không tìm cách thay đổi bất kỳ API nào khác. – Tommy

Trả lời

8

Tôi đã tìm ra. Tôi đã phải chuyển từ org.apache.poi.hssf.usermodel đến org.apache.poi.ss.usermodel

này cho phép bạn sử dụng 16k cột hoặc một cái gì đó như thế.

+3

Trả lời bởi @ kk1010 cung cấp giải thích tốt hơn về "lý do". – jmelanson

3

Bạn có thể xem xét chuyển đổi từ dọc sang ngang (hay nói cách khác, transposing dữ liệu) do đó bạn có thể sử dụng 65k hàng cho các ngày trong năm. Đây là chính xác những gì tôi đã làm với một báo cáo đòi hỏi một số lượng lớn các cột và số lượng nhỏ các hàng.

Hoặc, bạn có thể chia nhỏ năm trong các khoảng thời gian 6 tháng, mỗi phần trên một trang riêng.

Đây là cả hai giải pháp stopgap, nhưng có thể cung cấp cho bạn giải pháp "đủ tốt", tùy thuộc vào yêu cầu của bạn.  

24

Pre-2007 nổi trội tờ có giới hạn bộ 256 cột. Những trang tính đó cũng tạo phần mở rộng ".xls". Excel 2007 trở đi có thể chứa 16K cột, dựa trên định dạng XML và tạo định dạng ".xlsx". Mô hình đối tượng POI cho các trang tính trước năm 2007 là org.apache.poi.hssf.usermodel trong khi mô hình đối tượng cho các trang tính 2007 trở đi là org.apache.poi.xssf.usermodel Gói giao diện org.apache.poi.ss.usermodel cung cấp giao diện đồng nhất bao gồm cả hai mô hình đối tượng. Vì vậy, để tạo nhiều hơn 256 cột, bạn sẽ phải sử dụng các lớp trong gói org.apache.poi.xssf.usermodel hoặc trong org.apache.poi.ss.usermodel.

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