2012-06-06 14 views
20

से अपाचे पीओआई एक्सएसएसएफसीओलर मैं हेक्स कोड में दिए गए रंग में किसी सेल का अग्रभूमि रंग सेट करना चाहता हूं। उदाहरण के लिए, जब मैं कोशिश लाल करने के लिए यह निर्धारित करने के लिए:हेक्स कोड

style.setFillForegroundColor(new XSSFColor(Color.decode("#FF0000")).getIndexed()); 

कोई फर्क नहीं पड़ता हेक्स मूल्य मैं डिकोड समारोह के लिए पैरामीटर में निर्धारित करते हैं, getIndexed समारोह हमेशा काले रंग वापस आ जाएगी।

क्या यह हो सकता है कि मैं कुछ गलत कर रहा हूं? मुझे लगता है कि यह एक बग है लेकिन मुझे यकीन नहीं है ...

+0

आपको इंडेक्स() क्यों प्राप्त करने की आवश्यकता है? पिछड़े संगतता के लिए ?? इसे हटाने का प्रयास करें। – gtiwari333

+0

यदि आप किसी सेल को शैली लागू करते हैं, तो क्या यह एक्सेल में लाल रंग के रूप में सही ढंग से दिखाई देता है? – Gagravarr

+0

मुझे getindexed की आवश्यकता है क्योंकि विधि केवल एक छोटा मान स्वीकार करेगी। – Neets

उत्तर

67

अच्छी खबर यह है कि यदि आप एक्सएसएसएफ का उपयोग कर रहे हैं, तो एचएसएसएफ के विपरीत, तो आपकी समस्या का समाधान काफी आसान है। आपको बस अपनी स्टाइल वैरिएबल को XSSFCellStyle में डालना होगा। यदि आप करते हैं, तो setFillForegroundColor का एक संस्करण है जो XSSFColor तर्क लेता है, इसलिए आपको getIndexed() को कॉल करने की आवश्यकता नहीं है। यहां कुछ उदाहरण कोड दिया गया है:

XSSFCellStyle style = (XSSFCellStyle)cell.getCellStyle(); 
XSSFColor myColor = new XSSFColor(Color.RED); 
style.setFillForegroundColor(myColor); 

हालांकि, यदि आप एचएसएसएफ का उपयोग कर रहे हैं, तो चीजें कठिन होती हैं। एचएसएसएफ एक रंग पैलेट का उपयोग करता है, जो कि रंगों की एक सरणी है। सेट में आप जो छोटा मान सेट करते हैं FillForegroundColor पैलेट में एक अनुक्रमणिका है।

तो आपके पास समस्या एक आरजीबी मान को पैलेट इंडेक्स में परिवर्तित कर रही है। GetIndexed() का उपयोग करके प्रस्तावित समाधान तार्किक है, लेकिन, अफसोस की बात है, यह XSSFColor के लिए काम करता है जिस तरह से आपको लगता है कि यह करना चाहिए।

सौभाग्य से, एक समाधान है। इस पल के लिए, मान लीजिए कि आप एक कस्टम रंग का उपयोग करने के बजाय डिफ़ॉल्ट पैलेट में रंगों में से किसी एक का उपयोग करके संतुष्ट होंगे। उस स्थिति में, आप समस्या को हल करने के लिए HSSFPalette और HSSFColor कक्षाओं का उपयोग कर सकते हैं।

HSSFWorkbook hwb = new HSSFWorkbook(); 
HSSFPalette palette = hwb.getCustomPalette(); 
// get the color which most closely matches the color you want to use 
HSSFColor myColor = palette.findSimilarColor(255, 0, 0); 
// get the palette index of that color 
short palIndex = myColor.getIndex(); 
// code to get the style for the cell goes here 
style.setFillForegroundColor(palIndex); 

आप डिफ़ॉल्ट पैलेट में पहले से ही नहीं कस्टम रंग का उपयोग करना चाहते हैं, तो आप उन्हें पैलेट में जोड़ने के लिए यहाँ कुछ उदाहरण कोड है। HSSFPalette के लिए जावाडोक उन विधियों को परिभाषित करता है जिनका आप उपयोग करने के लिए उपयोग कर सकते हैं।

+0

में दिखाई देता है मैं एक्सएसएसएफ का उपयोग कर रहा था, इसलिए पहले समाधान ने चाल बनाई। आपका बहुत बहुत धन्यवाद! – Neets

+1

धन्यवाद आदमी मैं इस –

+0

के लिए खोज रहा था XSSFColor एक आकर्षण की तरह काम किया! धन्यवाद – Gleeb

6

आप बस निम्न कर सकते हैं:

XSSFColor grey =new XSSFColor(new java.awt.Color(192,192,192)); 
cellStyle.setFillForegroundColor(grey); 

और यह काम करता है :)

+3

नीचे यह काम करता है और एक सेल – Gleeb

+0

पर आरजीबी रंग लगाने का आसान तरीका देता है बस ध्यान दें कि यह आपके टूट सकता है एडब्ल्यूटी कक्षाओं और सर्वर पर निर्भरता के कारण सर्वर हेडलेस हो सकता है। अभी तक इसे जांच नहीं किया। – Daniel

12

उपयोग XSSFColorXSSFWorkbook के लिए। XSSFColorbyte[] rgb या java.awt.Color ले सकता है। नीचे उदाहरण देखें:

  1.  

    XSSFWorkbook wb = new XSSFWorkbook(); 
    XSSFCellStyle cellStyle = wb.createCellStyle(); 
    byte[] rgb = new byte[3]; 
    rgb[0] = (byte) 242; // red 
    rgb[1] = (byte) 220; // green 
    rgb[2] = (byte) 219; // blue 
    XSSFColor myColor = new XSSFColor(rgb); // #f2dcdb 
    cellStyle.setFillForegroundColor(myColor); 
    cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); 
    
  2. GuenSeven का जवाब देखने के

    XSSFColor myColor = new XSSFColor(new java.awt.Color(242, 220, 219)); // #f2dcdb 
    cellStyle.setFillForegroundColor(myColor); 
    cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); 
    
+0

मैं .setFillForegroundColor (mycolor) का उपयोग करने में सक्षम नहीं हूं; मैं क्या करूं? – meme

+0

@meme, poi संस्करण 3.0.7 या बाद में अपग्रेड, मैं संस्करण 3.10 का उपयोग करता हूं –

0

XSSFCellStyle स्वीकार 3.07 ऊपर poi संस्करण के लिए विधि setFillForegroundColor में रंग ... इसलिए जाँच समस्या में आने से बचने के लिए पहले आपका संस्करण I सामना कर रहा था ... पिछले संस्करण तर्क के रूप में कम की जरूरत है।

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