अपाचे POI लॉकिंग हैडर पंक्तियाँ


84

क्या कोई व्यक्ति अपाचे POI 3.7 के साथ बनाई गई स्प्रेडशीट में एक पंक्ति को लॉक करने के तरीके से परिचित है? लॉक करने से मेरा मतलब है कि मैं चाहता हूं कि कॉलम के लिए शीर्षक पंक्ति दिखाई दे जब उपयोगकर्ता पंक्तियों के माध्यम से स्क्रॉल कर रहा हो। मेरी बनाई हुई स्प्रैडशीट में 500 पंक्तियाँ होंगी और यह फायदेमंद होगा यदि कॉलम के नाम हमेशा दिखाई दें।


2
POI 3.7 अभी थोड़ा पुराना है, क्या कोई कारण है कि आप नवीनतम संस्करण का उपयोग क्यों नहीं कर रहे हैं?
गाग्रवेर

2
हां, जो मेरे नियोक्ता ने अधिकृत किया है।

जवाबों:


130

यदि आपको शीट में कहीं भी किसी विशेष पंक्ति को फ्रीज करने की आवश्यकता है तो आप इसका उपयोग कर सकते हैं (भीतर org.apache.poi.ss.usermodel.Sheet) (पीओआई 3.7 में भी उपलब्ध है)

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

आपके मामले में यदि आप अपनी पहली x पंक्तियों को फ्रीज करना चाहते हैं तो int leftmostColumn, int topRowअनुभाग हटा दिया जाएगा और आप बस उपयोग कर सकते हैं

Sheet.createFreezePane(int colSplit, int rowSplit)

उदाहरण के लिए

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

मैं अपने पहले कॉलम और पंक्ति संख्या १, को केवल फ्रीज करना चाहता हूं, कृपया मुझे सुझाव दें कि इसे कैसे प्राप्त किया जाए। अग्रिम में धन्यवाद।
आशीष बर्नवाल

17

ऐसा करने के लिए, आप निम्नानुसार एक फ्रीज़ फलक बना सकते हैं:

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

यह जगह में पहली पंक्ति को फ्रीज कर देगा। अधिक विकल्पों के साथ एक और विधि है, इसलिए एपीआई की जांच करें ।

केवल ध्यान देने योग्य बात यह होगी कि यदि आप XSSF वर्कबुक का उपयोग कर रहे हैं - संस्करण 3.8-बीटा 3 में बगफिक्स का उल्लेख है जिसने एक्सएसएसएफ स्प्रेडशीट का उपयोग करके फ्रीज पैन का व्यवहार तय किया है:

50884 - XSSF और HSSF फ्रीज़ पैन अब समान व्यवहार करते हैं (पोई-डेवलपर्स)

मुझे इसका ब्योरा नहीं पता है, लेकिन अगर आप उस नाव में हैं तो इसकी जांच के लायक होगा।


1

आप बीच की पंक्तियों को फ्रीज नहीं कर सकते हैं ऊपर की पंक्तियों को भी फ्रीज किए बिना।

मान लें कि आपके पास 100 पंक्तियाँ हैं और आपकी शीर्ष पंक्ति पंक्ति 50 पर है। आप अपेक्षा कर सकते हैं कि केवल पंक्ति 50 लॉक हो जाए ताकि पंक्ति 1-49 से स्क्रॉल करते समय, सब कुछ स्क्रॉल हो जाए और जब यह पंक्ति 50 तक पहुँच जाए, तो 50 वीं पंक्ति स्क्रॉल हो जाती है शीर्ष और वहाँ रहता है जब लाइनों 51-100 स्क्रॉल किया जाता है।

लेकिन, वर्कअराउंड है। आप क्या कर सकते हैं, पंक्तियों को समूहित करें और फिर उन्हें फ्रीज करें।

सबसे पहले, पंक्तियों को 1-49 से समूहित करें और फिर 1-50 से पैन को फ्रीज करें। अब उपयोगकर्ता समूह को कम कर सकता है और फिर तालिका शीर्ष पर बंद और शीर्ष पर तालिका के साथ काम कर सकता है।

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

हालांकि एक छोटा कैच है। यदि MS शीट संरक्षित है तो MS Excel आपको किसी समूह का विस्तार / पतन नहीं करने देगा। इसके लिए आपको मैक्रो लिखने की जरूरत है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.