2011-06-28 18 views
8

मुझे जावा लाइब्रेरी Apache POI for spreadsheets का उपयोग करके एक .xls (एक्सेल) फ़ाइल जेनरेट करने की आवश्यकता है।एक्सेल के लिए अपाचे पीओआई: सेल कॉलम को पूरे कॉलम के लिए "टेक्स्ट" पर सेट करना

फ़ाइल में कॉलम ए में फ़ोन नंबरों की एक सूची होगी, जिसे "0221 ...." या "+49221 ..." के रूप में स्वरूपित किया गया है - इसलिए डिफ़ॉल्ट रूप से एक्सेल उन्हें संख्यात्मक कोशिकाओं के रूप में व्याख्या करता है। यह बुरा है, क्योंकि अग्रणी 0 या + छंटनी होगी।

समस्या को हल करने के लिए, मैं cell.setCellType(Cell.CELL_TYPE_STRING) का उपयोग कर सकता हूं, जो ठीक काम करता है, लेकिन केवल विशिष्ट कोशिकाओं के लिए मैंने इसे सेट किया है।

मैं पूरे कॉलम के लिए इस सेटिंग को कैसे लागू कर सकता हूं (यानी सभी शेष कक्षों के लिए भी, जहां उपयोगकर्ता अतिरिक्त फोन नंबर दर्ज करेगा)?

एक्सेल में, यह संभव है: संपूर्ण स्तंभ का चयन, और कोशिका प्रकार लागू (सेटिंग को सहेजने में बचता/फ़ाइल लोड।)

लेकिन मैं POI के लिए सही विधि नहीं मिल रहा।

  • सबसे पहले मैंने माना, यह sheet.setDefaultCellType(int colNum) जैसा कुछ होना चाहिए। लेकिन मुझे ऐसा कुछ नहीं मिल रहा है (शायद मैं सिर्फ अंधा हूं? लाइब्रेरी में "संरेखण केंद्र" जैसे टेक्स्ट शैलियों को लागू करने के लिए बहुत सारे similar methods हैं)
  • तब मैंने सोचा: शायद इसे केवल लागू किया जा सकता है NamedRange या कुछ समान है, लेकिन मैं यह काम करने में कामयाब नहीं रहा हूं कि यह कैसे काम करता है ...

उत्तर

10

this सहायता होगी?

@ प्रतीक के साथ एक डाटा प्रारूप बनाने और CellStyle उद्देश्य यह है कि उसके बाद विधि setDefaultColumnStyle() में भेजा जाता है में उपयोग करके, यह करने के लिए स्तंभ का डिफ़ॉल्ट डेटा प्रकार सेट करने के लिए संभव हो गया था, में इस मामले, पाठ। मैंने आगे का प्रयोग नहीं किया है लेकिन संदेह है कि कुछ अन्य स्टाइल ऑब्जेक्ट्स के समान कुछ भी संभव होगा ताकि डिफ़ॉल्ट प्रकार को संख्यात्मक या यहां तक ​​कि एक अनुकूलित प्रारूप जैसे मुद्रा को सेट किया जा सके।

+0

यह अच्छा लग रहा है! जैसे ही मैं परियोजना पर वापस आऊंगा, मैं इस समाधान का प्रयास करूंगा। धन्यवाद! –

+0

यह काम करता है ... धन्यवाद! – jahroy

+0

मैंने वही किया। var cllstyl = this.Workbook.CreateCellStyle(); var कार्यपुस्तिका = नई HSSFWorkbook(); var currDataFormat = workbook.CreateDataFormat(); cllstyl.DataFormat = currDataFormat.GetFormat ("@"); शीट। सैटडिफॉल्ट कॉलम स्टाइल (1, क्लस्टाइल); लेकिन यह "टेक्स्ट" प्रारूप नहीं दिखा रहा है, इसके बजाय यह "तिथि" दिखाता है। कृपया इस पर मेरी सहायता करें। –

16

यहां कुछ उदाहरण Vlad के जवाब से प्रेरित कोड है:

DataFormat fmt = workbook.createDataFormat(); 
CellStyle textStyle = workbook.createCellStyle(); 
textStyle.setDataFormat(fmt.getFormat("@")); 
worksheet.setDefaultColumnStyle(0, textStyle); 

ऊपर कोड कार्यपत्रक करने के लिए पाठ के पहले स्तंभ के लिए डिफ़ॉल्ट शैली सेट करता है।

धन्यवाद, व्लाद!

+4

+1 वास्तविक कोड दिखाने के लिए। – Magnilex

+0

बहुत बहुत धन्यवाद, यह मेरे लिए काम किया :) –

0

Vlad: इससे अधिकांश समस्याएं हुईं। मैंने पाया कि सभी रिक्त पंक्तियों को जिस तरह से मैं चाहता था उसे स्वरूपित किया गया था। हालांकि पंक्तियां जहां मैंने शुरुआती शून्य देखा और ठीक काम किया; हालांकि अगर मुझे शून्य से शुरू होने वाले दूसरे मान के साथ पूर्व-मौजूदा मान बदलना पड़ा तो शून्य गायब हो गई। इसलिए जब आप सेटसेल स्टाइल को पाठ में रीसेट करने के लिए सेल में मान बनाते हैं तो कोड जोड़ने की सलाह देते हैं। यहाँ कुछ के टुकड़े कर रहे हैं: विधि सार्वजनिक सेल createCell (पंक्ति आर !, BBjNumber सेल, BBjString मूल्य!)

c!=#this!.createCell(r!, cell) 
c!.setCellValue(value!) 
c!.setCellStyle(#text_format!) 

methodret ग!

#text_format! = #wb!.createCellStyle() 
#text_format!.setDataFormat(#format!.getFormat("@")) 

methodend

इस प्रारंभिक शून्यों के लिए कुछ अन्य एकमात्र खोज में मदद कर सकते हैं। पोस्ट करने के लिए धन्यवाद। एलेक्स

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

  • कोई संबंधित समस्या नहीं^_^