2012-10-31 20 views
11

ओवरराइड करता है मैं Apache POI उपयोग कर रहा हूँ एक .xlsx फ़ाइल में डेटा निर्यात करने और मैं पंक्तियों और कोशिकाओं फ़ाइल में से कुछ शैली करना चाहते हैं।Apache POI, नई कोशिकाओं का निर्माण पंक्ति शैली

मैं XSSF उपयोग कर रहा हूँ के बाद से फ़ाइल जा रहा है Excel 2007+ में पढ़ने के लिए।

असल में, मेरी समस्या यह है कि मैं निम्नलिखित उदाहरण में एक पंक्ति शैली सेट करने की कोशिश कर रहा हूं, जो सूचकांक 0 पर पूरी पंक्ति के लिए एक काला अग्रभूमि रंग सेट करता है। यह ठीक काम करता है, लेकिन जब भी मैं एक नया सेल बनाता हूं , नव निर्मित सेल में कोई शैली नहीं है, जैसे कि यह निर्दिष्ट पंक्ति शैली को ओवरराइड कर रहा है।

यहाँ मैं क्या कर रहा हूं प्रदर्शित करने के लिए एक कोड का टुकड़ा है:

XSSFWorkbook wb = new XSSFWorkbook(); 
XSSFSheet sheet = wb.createSheet("mySheet"); 
XSSFRow row = sheet.createRow(0); 

XSSFCellStyle myStyle = wb.createCellStyle();   

myStyle.setFillForegroundColor(new XSSFColor(new Color(255, 255, 255))); 
myStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); 

row.setRowStyle(myStyle); //This works, the whole row is now black 

row.createCell(0); // This cell doesn't have a style, the rest of the line stays stylized 
row.getCell(0).setCellValue("Test"); 

मैं भी करने की कोशिश की * row.createCell (0, Cell.CELL_TYPE_STRING), *, लेकिन यह कुछ भी नहीं बदला। पूरा मुझे क्या करना चाहते हैं का सही तरीका

क्या है? मैं इसे इस तरह से करना चाहता था इसलिए मुझे इसे बनाने के बाद प्रत्येक सेल की शैली को सेट करने की ज़रूरत नहीं थी क्योंकि उसी पंक्ति पर सभी कोशिकाओं में एक ही शैली है।

+0

_row.createCell() _ बुला की कोशिश से पहले _row.setRowStyle (myStyle); _ –

+1

हाँ मैंने पहले ही कोशिश की है और ऑर्डर कोई फर्क नहीं पड़ता कि यह –

+0

_row.setCellValue ("टेस्ट") है; _ मुझे संकलन समय त्रुटि जांच देता है! –

उत्तर

10

रूप में अच्छी तरह जैसे नव निर्मित सेल में शैली सेट करें नीचे:

XSSFCell newCell = row.createCell(0); 
    newCell.setCellStyle(myStyle); 
+8

मैं जानता हूँ कि मैं क्या कर सकते हैं देखते हैं कि के रूप में मैं अपने प्रश्न में उल्लेख किया है, लेकिन मैं वास्तव में नहीं दिख रहा है क्या पंक्ति शैली निर्धारित करने की बात है अगर मुझे बाद में प्रत्येक सेल की शैली को मैन्युअल रूप से सेट करना है। –

+1

@Adammith: मुझे संदेह है कि नव निर्मित सेल माता-पिता से गुण प्राप्त करता है। –

+0

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

9

यहां तक ​​कि आप शैली के साथ एक पंक्ति बनाते हैं, यह इसके सेल को प्रभावित नहीं करेगा। निर्माण कक्ष में अपनी स्वयं की सेल शैली होती है। row stylecell style पर स्वचालित रूप से ओवरराइड नहीं होगा। यदि आप सेल में पंक्ति शैली का उपयोग करना चाहते हैं, तो आपको फिर से सेट करना होगा।

आप अंत में row style सेट यहां तक ​​कि अगर, यह सेल करने के लिए प्रभाव नहीं होगा।

उदाहरण

CreationHelper createHelper = wb.getCreationHelper(); 
Sheet sheet = wb.createSheet("new sheet"); 
Row r = sheet.createRow(0); 
r.setRowStyle(rowStyle); 

Cell c1 = r.createCell(0); 
c1.setCellValue("Test 1"); 
c1.setCellStyle(rowStyle); 
+2

तब 'setRowStyle' का बिंदु क्या है? –

+0

@ Mateus-viccari मान लिया जाये कि '' setRowStyle' setDefaultColumnStyle' रूप में एक ही काम करता है: यह वास्तव में है कि मैन्युअल रूप से जोड़ रहे हैं कोशिकाओं के लिए (डिफ़ॉल्ट) शैली सेट * के बाद कार्यपुस्तिका पहले से ही निर्यात किया गया है * (अर्थात एक मानव द्वारा)। – Auke

0

मैं मानता हूँ कर रहा हूँ कि "setRowStyle" के रूप में यह होना चाहिए काम नहीं करता।

मैं अपने खुद के समारोह बनाई गई एक सीमा पर शैली लागू (एक पंक्ति या एक से अधिक पंक्ति हो सकता है) के लिए

public void applyStyleToRange(Sheet sheet, CellStyle style, int rowStart, int colStart, int rowEnd, int colEnd) { 
    for (int r = rowStart; r <= rowEnd; r++) { 
     for (int c = colStart; c <= colEnd; c++) { 
      Row row = sheet.getRow(r); 

      if (row != null) { 
       Cell cell = row.getCell(c); 

       if (cell != null) { 
        cell.setCellStyle(style); 
       } 
      } 
     } 
    } 
} 
संबंधित मुद्दे