Apache POI Locking Header Rows


82

Có ai quen với cách khóa một hàng trong bảng tính được tạo bằng Apache POI 3.7 không? Bằng cách khóa, ý tôi là tôi muốn hàng tiêu đề cho các cột vẫn hiển thị khi người dùng cuộn qua các hàng. Bảng tính đã tạo của tôi sẽ có 500 hàng và sẽ rất có lợi nếu tên của cột luôn hiển thị.


2
POI 3.7 hiện đã hơi cũ, có lý do gì khiến bạn không sử dụng phiên bản mới nhất?
Gagravarr

2
Vâng đó là những gì chủ nhân của tôi đã ủy quyền.

Câu trả lời:


128

Trong trường hợp bạn cần Cố định bất kỳ hàng cụ thể nào ở bất kỳ vị trí nào trong trang tính, bạn có thể sử dụng (Trong vòng org.apache.poi.ss.usermodel.Sheet) (Có sẵn trong POI 3.7)

Sheet.createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)

Trong trường hợp của bạn, nếu bạn chỉ muốn cố định x hàng đầu tiên thì int leftmostColumn, int topRowphần đó sẽ bị xóa và bạn có thể chỉ sử dụng

Sheet.createFreezePane(int colSplit, int rowSplit)

ví dụ

sheet1.createFreezePane(0, 5); // this will freeze first five rows

Tôi chỉ muốn cố định cột đầu tiên và hàng số 17, vui lòng đề xuất cho tôi cách đạt được điều này. Cảm ơn trước.
Ashish Burnwal

17

Để làm điều này, bạn có thể tạo một ngăn cố định như sau:

workbook.getSheetAt(workbook.getActiveSheetIndex()).createFreezePane(0, 1);

Điều này sẽ đóng băng hàng đầu tiên tại chỗ. Có một phương pháp khác với nhiều tùy chọn hơn, vì vậy hãy xem API .

Điều duy nhất cần lưu ý là nếu bạn đang sử dụng sổ làm việc XSSF - có đề cập đến một bản sửa lỗi trong phiên bản 3.8-beta3 đã khắc phục hành vi của các ngăn đóng băng sử dụng bảng tính XSSF:

50884 - Các ngăn đóng băng XSSF và HSSF hiện hoạt động giống nhau (poi-developer)

Tôi không biết chi tiết về việc này, nhưng sẽ rất đáng để điều tra nếu bạn ở trong chiếc thuyền đó.


1

Bạn không thể đóng băng một hàng ở giữa mà không làm cho các hàng phía trên nó cũng bị đóng băng.

Giả sử bạn có 100 hàng và hàng tiêu đề của bạn ở dòng 50. Bạn có thể mong đợi rằng chỉ hàng 50 bị khóa để khi cuộn từ dòng 1-49, mọi thứ được cuộn lên và khi đến dòng 50, hàng thứ 50 sẽ cuộn đến trên cùng và ở đó khi dòng 51-100 được cuộn.

Tuy nhiên, có một cách giải quyết. Những gì bạn có thể làm là, nhóm các hàng và sau đó đóng băng chúng.

Đầu tiên, nhóm các hàng từ 1-49 và sau đó cố định các ô từ 1-50. Bây giờ người dùng có thể thu nhỏ nhóm và sau đó làm việc với bảng với tiêu đề bảng bị khóa và ở trên cùng.

sheet.groupRow(0, 49);
sheet.createFreezePane(0, 50);

Tuy nhiên, có một điểm nhỏ. MS Excel sẽ không cho phép bạn mở rộng / thu gọn một nhóm nếu trang tính được bảo vệ. Đối với điều này, bạn cần phải viết một Macro.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.