2011-06-28 19 views
8

JavaライブラリApache POI for spreadsheetsを使用して.xls(Excel)ファイルを生成する必要があります。Apache POI for Excel:列全体のセルタイプを「テキスト」に設定する

ファイルには、 "0221 ...."または "+49221 ..."と書式設定された列Aの電話番号のリストが含まれているため、Excelはデフォルトで数値セルとして解釈します。先頭の0または+がトリミングされるため、これは悪いことです。

この問題を解決するには、cell.setCellType(Cell.CELL_TYPE_STRING)を使用します。これはうまく動作しますが、これを設定した特定のセルに対してのみ有効です。

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

、これは可能です:列全体を選択し、セルタイプを適用する(設定ファイルのロード/セーブ生き残っています。)

しかし、私はPOIのための正しい方法を見つけることができません。

  • まず、私はそれがsheet.setDefaultCellType(int colNum)のようなものであると仮定しました。しかし、私はこれのようなものを見つけることができません(おそらく私は盲目でしょうか? "センターの整列"のようなテキストスタイルを適用するための図書館にはsimilar methodsがたくさんあります)
  • 私は考えました: NamedRangeなどと似ていますが、これがどのように機能するかはわかりません...

答えて

10

Will thisヘルプ? @記号とデータフォーマットを作成し、setDefaultColumnStyle()メソッドに渡されCellStyle オブジェクトに、それが中にカラムのデフォルトのデータ型を設定することが可能 たことを使用することにより

この場合、テキスト。 私はさらに経験はしていませんが、 を他のスタイルオブジェクトと同様のものにして、デフォルトタイプを 数値に設定したり、通貨などのカスタマイズしたフォーマットにすることは可能だろうと思われます。

+0

いいですね!私がプロジェクトに戻ったら、すぐにこの解決策を試してみましょう。ありがとう! –

+0

これは機能します...ありがとう! – jahroy

+0

私は同じことをしました。 var cllstyl = this.Workbook.CreateCellStyle(); varブック=新しいHSSFWorkbook(); var currDataFormat = workbook.CreateDataFormat(); cllstyl.DataFormat = currDataFormat.GetFormat( "@"); sheet.SetDefaultColumnStyle(1、cllstyl);しかし、それは "テキスト"形式を表示していない、代わりに "日付"を示しています。これで私を助けてください。 –

16

ここでヴラドの答えに触発されたいくつかのサンプルコードです。

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

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

ありがとう、Vlad!

+4

+1は実際のコードを表示します。 – Magnilex

+0

ありがとう、それは私のために働いた:) –

0

Vlad: これはほとんどの問題を解決しました。空の行はすべて、私が望むように書式設定されていることがわかりました。しかし、私は最初のゼロを見て、うまく働いた行;しかし、ゼロから始まる別の値で既存の値を変更しなければならない場合、ゼロは消えてしまいます。ですから、セルに値を作成してsetCellStyleをテキストにリセットするときにコードを追加することをお勧めします。ここではいくつかのスニペットは、次のとおりです。 メソッドpublicセルcreateCell(行R!BBjNumber細胞、BBjString値!)

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

methodretのC!

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

methodend

これは最初のゼロのためのいくつかの他の唯一の検索を助けるかもしれません。 ありがとうございます。 アレックス

関連する問題