2012-03-20 1 views
10

Мне нужно записать двойное значение в числовой ячейке с использованием определенного формата, я имею в виду, что сгенерированные xls должны иметь числовые ячейки, содержащие двойные значения, например: 8,1. Я пытаюсь что-то вроде:Напишите двойное значение в числовой ячейке с определенным форматом в Apache Poi 3.7

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

Но, так как метод формата возвращает String, независимо от того, создавать ли я ячейки как числовые или нет, они всегда ведут себя как текстовые ячейки. Я думал о двух вариантах:

  • Принудительные ячейки, чтобы вести себя как числовые ячейки.
  • Забыть о DecimalFormat и использовать двоеточие, определяющее запятую как разделитель десятичных чисел, что я не уверен, что это возможно.

Есть идеи?

ответ

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 столбца? Excel имеет встроенную функцию «Тексты в столбцы», которую вы должны иметь возможность ссылаться, которая разделит весь столбец текстовых строк на несколько столбцов на основе разделителя (например, запятой). В VBA, это выглядит примерно так:

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 

Что касается первого предлагаемого решения, это не представляется возможным, чтобы заставить Excel лечить что-то, как число, если оно не конвертируемая в число.

+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? –

Смежные вопросы