Apache POI Kilitleme Başlık Satırları


84

Apache POI 3.7 ile oluşturulan bir elektronik tablodaki bir satırı kilitlemenin bir yolunu bilen var mı? Kilitlemekle demek istediğim, kullanıcı satırlar arasında gezinirken sütunların başlık satırının görünür kalmasını istiyorum. Oluşturduğum e-tablomda 500 satır olacak ve sütun adlarının her zaman görünür olması faydalı olacaktır.


2
POI 3.7 artık biraz eski, en son sürümü kullanmamanızın bir nedeni var mı?
Gagravarr

2
Evet, işverenimin yetkilendirdiği şey bu.

Yanıtlar:


130

Sayfanın herhangi bir yerinde herhangi bir satırı Dondurmanız gerektiğinde (İçinde org.apache.poi.ss.usermodel.Sheet) kullanabilirsiniz ( POI 3.7'de de mevcuttur)

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

Sizin durumunuzda, yalnızca ilk x satırınızı dondurmak istiyorsanız, int leftmostColumn, int topRowbölüm kaldırılır ve yalnızca

Sheet.createFreezePane(int colSplit, int rowSplit)

Örneğin

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

Sadece 1. sütunumu ve 17 numaralı satırımı dondurmak istiyorum, lütfen bana bunu nasıl başaracağımı önerin. Şimdiden teşekkürler.
Ashish Burnwal

17

Bunu yapmak için aşağıdaki gibi bir donma bölmesi oluşturabilirsiniz:

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

Bu, ilk satırı yerinde donduracaktır. Daha fazla seçeneğe sahip başka bir yöntem var, bu yüzden API'ye göz atın .

Unutulmaması gereken tek şey, XSSF çalışma kitaplarını kullanıyorsanız olacaktır - 3.8-beta3 sürümünde, XSSF elektronik tablolarını kullanarak bölmeleri dondurmanın davranışını düzelten bir hata düzeltmesinden bahsedilmektedir:

50884 - XSSF ve HSSF donma bölmeleri artık aynı şekilde davranıyor (poi geliştiricileri)

Bunun ayrıntılarını bilmiyorum, ama o teknede iseniz araştırmaya değer.


1

Bir orta sırayı, üstündeki sıralar da donmadan donduramazsınız.

100 satırınız olduğunu ve başlık satırınızın 50. satırda olduğunu varsayalım. Yalnızca 50. satırın kilitlenmesini bekleyebilirsiniz, böylece 1-49. Satırdan kaydırırken her şey yukarı kaydırılır ve 50. satıra ulaştığında 50. satır yukarı ve 51-100. satırlar kaydırıldığında orada kalır.

Ancak, bir çözüm var. Yapabileceğiniz şey, satırları gruplandırmak ve ardından dondurmaktır.

İlk önce 1-49 arasındaki satırları gruplayın ve ardından 1-50 arasındaki bölmeleri dondurun. Artık kullanıcı grubu simge durumuna küçültebilir ve ardından masa başlığı kilitli ve en üstte olacak şekilde masayla çalışabilir.

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

Yine de küçük bir sorun var. MS Excel, sayfa korumalıysa bir grubu genişletmenize / daraltmanıza izin vermez. Bunun için bir Makro yazmanız gerekiyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.