2012-03-20 11 views
10

में विशिष्ट प्रारूप के साथ संख्यात्मक सेल में डबल मान लिखें, मुझे एक विशिष्ट प्रारूप का उपयोग करके एक संख्यात्मक सेल में एक डबल मान लिखने की आवश्यकता है, मेरा मतलब है, जेनरेट किए गए xls में संख्यात्मक कक्ष होना चाहिए जैसे कि डबल मान, उदाहरण के लिए: 8.1। के बाद से प्रारूप विधि एक स्ट्रिंग, कोई फर्क नहीं पड़ता मैं संख्यात्मक रूप में कोशिकाओं को बनाने या नहीं, वे हमेशा पाठ कोशिकाओं के रूप में व्यवहार करते हैं कि क्या देता है,अपाचे पोई 3.7

DecimalFormat dFormat = new DecimalFormat("##.#"); 
dFormat.format(doubleValue); 

लेकिन: मैं की तरह कुछ कोशिश कर रहा हूँ।

  • कोशिकाओं जबरदस्ती के रूप में संख्यात्मक कोशिकाओं व्यवहार करने के लिए: मैं के बारे में दो विकल्प सोच रहा था।
  • दशमलव के बारे में भूलना और दशमलव विभाजक के रूप में अल्पविराम निर्दिष्ट करने वाले डबल क्लास का उपयोग करें, मुझे यकीन नहीं है कि यह संभव है।

कोई विचार?

उत्तर

15

मैं कुछ गायब हो सकता है, लेकिन मुझे लगता है कि तुम सिर्फ एक प्रारूप शासन के साथ सेल शैली के लिए एक एकल दशमलव स्थान

// Do this only once per file 
CellStyle cellStyle = wb.createCellStyle(); 
cellStyle.setDataFormat(
    wb.getCreationHelper().createDataFormat().getFormat("#.#")); 

// Create the cell 
Cell c = row.createCell(2); 
c.setCellValue(8.1); 
c.setCellStyle(cellStyle); 

यही कारण है, एक प्रारूपण नियम बनाएगा एक सेल बनाने प्रदर्शित करना चाहते हैं, सेट सेल मूल्य 8.1 होने के लिए, तो यह शैली

+0

धन्यवाद @Gagravarr, यह वही है जो मैं खोज रहा था;) – Dani

0

क्या आपको दोनों मानों को एक सेल में रखना होगा? क्या आप उन्हें 2 कॉलम में विभाजित कर सकते हैं? एक्सेल में अंतर्निहित "टेक्स्ट्स टू कॉलम्स" फ़ंक्शन है जो आपको संदर्भित करने में सक्षम होना चाहिए जो टेक्स्ट स्ट्रिंग्स के पूरे कॉलम को डिलीमीटर (जैसे कॉमा) के आधार पर एकाधिक कॉलम में विभाजित करेगा।

Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ 
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ 
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _ 
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True 

अपने पहले प्रस्तावित समाधान के लिए, यह एक संख्या के रूप में कुछ के इलाज के लिए अगर यह एक नंबर करने के लिए convertable नहीं है एक्सेल मजबूर करने के लिए संभव नहीं है: VBA में, यह कुछ इस तरह लग रहा है।

+0

उत्तर देने के लिए धन्यवाद, @carmalize। मैंने खुद को बुरी तरह समझाया हो सकता है, लेकिन मेरे पास "दोनों मान" नहीं हैं, दशमलव विभाजक के रूप में अल्पविराम का उपयोग करके केवल एक डबल मान है। – Dani

7

मैं ठीक काम कर रहा यह कोशिश की ...

HSSFCellStyle cellStyle = wb.createCellStyle(); 
HSSFDataFormat hssfDataFormat = wb.createDataFormat(); 
String cellVal = "2500"; 
cellStyle.setDataFormat(hssfDataFormat.getFormat("#,##0.000")); 
newCell.setCellStyle(cellStyle); 
newCell.setCellValue(new Double(cellVal)); 
newCell.setCellType(Cell.CELL_TYPE_NUMERIC); 

उत्पादन वांछित प्रारूप के साथ एक अंकीय मान है: 2,500.000

+0

मान लीजिए कि मैं exmp के पैरामीटर का उपयोग करके दशमलव सेट करना चाहता हूं। cellStyle.setDataFormat में (hssfDataFormat.getFormat ("#, ## 0.000")); उसमें "#, ## 0.000", 4 या 5 दशमलव की बजाय int या long है? –