web-dev-qa-db-ja.com

Apache Poi3.7で特定の形式の数値セルにDouble値を書き込む

特定の形式を使用して数値セルにDouble値を書き込む必要があります。つまり、生成されたxlsには、たとえば、8,1のようなDouble値を含む数値セルが必要です。私は次のようなことを試みています:

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

ただし、formatメソッドは文字列を返すため、セルを数値として作成するかどうかに関係なく、常にテキストセルとして動作します。私は2つのオプションについて考えていました:

  • セルを数値セルとして動作させる。
  • DecimalFormatを忘れて、小数点記号としてコンマを指定するDoubleクラスを使用しますが、それが可能かどうかはわかりません。

何か案が?

11
Dani

何かが足りないかもしれませんが、小数第1位を表示するフォーマットルールでセルのスタイルを設定したいだけだと思います

// 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に設定されてから、スタイルが設定されます。

18
Gagravarr

私はこれをうまく動かしてみました...

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

8
Santosh MV

両方の値を1つのセルに入れる必要がありますか?それらを2つの列に分割できますか? Excelには、テキスト文字列の列全体を区切り文字(コンマなど)に基づいて複数の列に分割する参照可能な「TextstoColumns」関数が組み込まれています。 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
Ben Strombeck