2013-08-07 3 views
11

में रंग पैलेट तक पहुंच एक्सेल दस्तावेज़ों में पीओआई, कोशिकाओं और फोंट का उपयोग करते समय रंग की जानकारी होती है जो हमेशा आरजीबी मान नहीं लौटाती है और यह अक्सर केवल एक सूचकांक मान प्रदान करती है। अनुक्रमित मूल्य रंग प्राप्त करने के लिए कुछ के खिलाफ देखा जाना चाहिए। एक HSSFWorkbook (xls) में उपलब्ध करने के लिए एक विधि पैलेट प्राप्त करने के लिए है:XSSFWorkbook

InputStream in = new FileInputStream("sheet.xls"); 
HSSFWorkbook wb = new HSSFWorkbook(in); 
wb.getCustomPalette(); 

जब एक XSSFWorkbook (xlsx) तक पहुंचने में कोई ऐसी कोई विधि नहीं है और वास्तव में मैं संबंधित वर्गों में कहीं भी कोई पैलेट जानकारी पा सकते हैं । मैं एक्सएसएसफ़ॉन्ट और सेल से इंडेक्स वैल्यू प्राप्त करने में सक्षम हूं, लेकिन रंग "नाम" के रूप में इतना पाने का एकमात्र तरीका इंडेक्सडॉलर्स एनम के खिलाफ मेल खाना है। यह मुझे एक ही मूल समस्या पर लौटाता है; मेरे पास अभी भी उपयोग करने के लिए कोई आरजीबी मूल्य नहीं है।

InputStream in = new FileInputStream("sheet.xlsx"); 
XSSFWorkbook wb = new XSSFWorkbook (in); 
wb.getCustomPalette(); <-- fail! 

मैं CellStyle के माध्यम से XSSFColor हो रही है, इसलिए जैसे:

CellStyle style = cell.getCellStyle(); 
XSSFColor color = style.getFillBackgroundColorColor(); 

IndexedColors के माध्यम से एक रंग का नाम पाने के लिए:

for (IndexedColors c : IndexedColors.values()) { if (c.index == indexColor){ System.out.println("Color: " + c.name()); } } 

इसी प्रकार के प्रश्न: How do I get the (Java Apache POI HSSF) Background Color for a given cell?

संदर्भ: http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors

अद्यतन 1: मुझे कुछ ऐसा लगता है जो अंत में काम करता है। XSSFColor की यह विधि एआरजीबी हेक्स कोड देता है और इसके साथ मैं आरजीबी मान (स्पष्ट रूप से) निर्धारित कर सकता हूं। मुझे उम्मीद है कि यह एक ही मुद्दे वाले किसी के लिए x घंटे की संख्या को बचाने में मदद करता है।

((XSSFColor) color).getARGBHex()) 

2 अद्यतन: मेरी बेचैनी को ज्यादा, मैं पाया है कि कुछ कोशिकाओं पृष्ठभूमि ARGBHex डेटा वाली XSSFColor नहीं लौटाते हैं। इसके लिए एक काम की तलाश में है।

उत्तर

8

wb.getStylesSource() का उपयोग करके, आप StylesTable प्राप्त कर सकते हैं, जिससे आप सभी CellStyle ऑब्जेक्ट प्राप्त कर सकते हैं। XSSFCellStyle एपीआई में कलर ऑब्जेक्ट्स प्राप्त करने के लिए कई तरीके हैं - अर्थात्, XSSFColorXSSFCellStyle एपीआई के पास उस शैली के भीतर सभी फ़ॉन्ट्स तक पहुंच है - अर्थात XSSFFont, जिससे आप उस विशिष्ट फ़ॉन्ट के लिए XSSFColor ऑब्जेक्ट प्राप्त कर सकते हैं।

एक बार जब आप उस XSSFColor तक पहुंच प्राप्त कर लेते हैं, तो getRGB() पर कॉल आपको आरजीबी मानों का बाइट सरणी वापस कर देगा।

+0

मुझे एक सेल स्टाइल मिला है जो एक एक्सएसएसएफसीओलर देता है जो केवल इंडेक्स() प्राप्त करने के लिए एक गैर-शून्य मान देता है। यही कारण है कि मुझे पैलेट लुकअप की आवश्यकता है; इंडेक्स वैल्यू का मतलब है कि इसके खिलाफ मूल्य का उपयोग करने के लिए कुछ भी नहीं है। –

1

आप जो भी ढूंढ रहे हैं उसे ठीक से नहीं प्राप्त करने वाले हैं। HSSFPalette के बराबर XSSF संस्करण नहीं है। इसकी आवश्यकता नहीं है क्योंकि एचएसएसएफ वर्कबुक में रंगों की बहुत सीमित मात्रा थी जिसके साथ यह काम कर सकता था। आपके द्वारा प्रदान किए गए link में दिए गए निर्देश सबसे नज़दीकी हैं। यदि आप बस पूछ रहे हैं कि मुझे एक एक्सएसएसएफसीओएल ऑब्जेक्ट मिलने के बाद getRGB() की वापसी से किस रंग का मतलब है, तो आप हमेशा this वेबसाइट देख सकते हैं जो आपको आरजीबी मूल्यों में प्रवेश करने और रंग देखने देगा, अगर आप रंगीन रंग की तलाश में हैं, आपको मूल रूप से अपनी खुद की उपयोगिता बनाना होगा जो रंगों के लिए ज्ञात आरजीबी मूल्यों को संग्रहीत करेगा और कुछ विधि देखें जो आपके लौटे आरजीबी के सबसे नज़दीकी हैं। यह सबसे अच्छा है कि मैं आदमी कर सकता हूं, मुझे कुछ ऐसी जानकारी नहीं है जो आपको इस कार्यक्षमता को बॉक्स से बाहर कर देगी।

+0

यदि रंग को देखने के लिए पैलेट प्राप्त करने का कोई तरीका नहीं है, तो XSSFColor वापस आरजीबी क्यों नहीं होगा? लिंक दिखाता है कि सृजन के लिए रंग कैसे सेट करें, मैं एक मौजूदा xlsx पढ़ रहा हूं। –

1

यह देखने के लिए एक बात यह है कि एक्सेल सामान्य कोशिकाओं में ठोस भरने पैटर्न के लिए अग्रभूमि और पृष्ठभूमि का अर्थ उलट देता है।तो हो सकता है कि आपको ठोस पैटर्न प्रकार वाली कोशिकाओं के लिए getFillForegroundColorColor() विधि का उपयोग करने की आवश्यकता हो।

इसके अलावा, अपने पिछले प्रश्न पर वापस पढ़ना, 64 मान्य रंग सूचकांक नहीं है क्योंकि सीमा 0..63 है। इंडेक्स 64 का उपयोग सेल में डिफ़ॉल्ट अग्रभूमि रंग को इंगित करने के लिए किया जाता है।

(*) सशर्त प्रारूप कक्षों में यह ऐसा नहीं करता !!

+0

मैंने अब 64 के लिए व्हाइट को प्रतिस्थापित करने के लिए कोड को स्विच कर दिया है क्योंकि मैं नल और खाली कॉलम की अनुमति दे रहा हूं। मैं आपके द्वारा उल्लेख किए गए इस कॉलम रंग स्वैपिंग की जांच करूंगा। –

संबंधित मुद्दे