12

スプレッドシート用の Java ライブラリ Apache POI を使用して、.xls (Excel) ファイルを生成する必要があります。

このファイルには、列 A に電話番号のリストが含まれ、"0221...." または "+49221..." の形式になっているため、Excel はデフォルトでそれらを数値セルとして解釈します。先頭の 0 または + が削除されるため、これは不適切です。

この問題を解決するには、 を使用できますcell.setCellType(Cell.CELL_TYPE_STRING)。これは正常に機能しますが、これを設定した特定のセルに対してのみです。

この設定を列全体に適用するにはどうすればよいですか (つまり、ユーザーが追加の電話番号を入力する残りのすべてのセルにも)?

Excel では、これが可能です: 列全体を選択し、セルの種類を適用します (設定はファイルの保存/読み込み後も維持されます)。

しかし、POI の正しい方法が見つかりません。

  • 最初に私が想定したのは、次のようなものsheet.setDefaultCellType(int colNum)です。しかし、私はこのようなものを見つけることができません (おそらく私は盲目です? ライブラリには、「中央揃え」などのテキスト スタイルを適用するための同様の方法がたくさんあります)。
  • それから私は考えました: NamedRangeなどにしか適用できないかもしれませんが、これがどのように機能するかはわかりません...
4

4 に答える 4

23

Vladの回答に触発されたコード例を次に示します。

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

上記のコードは、ワークシートの最初の列のデフォルト スタイルをTEXTに設定します。

ありがとう、ヴラド!

于 2013-05-25T01:36:00.177 に答える
13

これは役に立ちますか?

@記号を使用してデータ形式を作成し、それをCellStyleオブジェクトで使用してsetDefaultColumnStyle()メソッドに渡すことにより、列のデフォルトのデータ型をこの場合はテキストに設定することができました。これ以上の実験はしていませんが、他のスタイルオブジェクトと同様のことを行って、デフォルトのタイプを数値に設定したり、通貨などのカスタマイズされた形式に設定したりできると思います。

于 2011-08-01T12:42:05.140 に答える
0

Vlad: これでほとんどの問題は解決しました。空の行はすべて、希望どおりにフォーマットされていることがわかりました。ただし、最初にゼロがあった行は正常に表示され、機能しました。ただし、既存の値をゼロで始まる別の値に変更する必要がある場合、ゼロは消えました。そのため、セルに値を作成するときにコードを追加して、setCellStyle をテキストにリセットすることをお勧めします。メソッド public Cell createCell(Row r!, BBjNumber cell, BBjString value!)

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

メソッドレット c!

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

メソッドエンド

これは、他の最初のゼロを単独で検索するのに役立つ場合があります。投稿していただきありがとうございます。アレックス

于 2015-04-03T15:36:15.057 に答える