Apache-POI 3.14を使用しています。セルを「テキスト」形式にロックダウンする必要があります。私のセルのデータはすべて数字である可能性がありますが、それでも文字列と見なされます。セルを書き込むときは、次のようにします。
cell.setCellValue("001");
cell.setCellType(Cell.CELL_TYPE_STRING);
Excelで出力ブックを開くと、セルに正しい値( "001")が含まれ、隅に小さな緑色の三角形が表示されます。感嘆符にカーソルを合わせると、吹き出しテキストThe number in this cell is formatted as text or preceded by an apostrophe
が表示されます。セルのフォーマット(右クリック->セルのフォーマット)を見ると、「カテゴリ」が「一般」と表示されています。これは「テキスト」であると思っていました。
ユーザーが数字のみを入力してセルの値を変更すると、問題が発生します。 「カテゴリ」は「一般」であるため、値は数値として入力および表示され、先行ゼロが削除されて右揃えされます。
Excelの[セルの書式設定]ダイアログと同じ結果を得るにはどうすればよいですか?
あなたはセルフォーマットをテキストに設定することを試みることができます
DataFormat fmt = wb.createDataFormat();
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
fmt.getFormat("@"));
cell.setCellStyle(cellStyle);
注:CellStylesは、該当するすべてのセルで再利用する必要があります。セルごとに新しいセルを作成しないでください。
.xlsx形式の「エラーを無視する」機能を使用することもできますが、サポートはまだ完全には行われていません。一部の Issue 46136 および Issue 58641 を参照してください進行中の議論。
追加情報については、 このMSDNページ も参照してください。
HSSFの場合
DataFormat fmt = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(fmt.getFormat("@"));
sheet.setDefaultColumnStyle(0, textStyle);
列スタイル全体をTextに設定し、カテゴリをTextに設定するだけです。
ただし、XSSF形式を使用している場合は機能しません(私はApache Poi 3.15を使用しており、機能しませんでした)。この場合、上記のコードに加えて、テキストとして扱いたい各セルにスタイルを設定しました。
cell.setCellStyle(textStyle);
エラーについては、使用できます
sheet.addIgnoredErrors(new CellRangeAddress(0,9999,0,9999),IgnoredErrorType.NUMBER_STORED_AS_TEXT );
行0から9999まで、列0から9999までのNUMBER_STORED_AS_TEXTエラーは無視され、表示されません。
OPがApacheソリューションを求めているように見えます。いくつか検索した後、私はこの答えを見つけました:
HSSFCellStyle style = book.createCellStyle();
style.setDataFormat(BuiltInFormats.getBuiltInFormat("text"));
これをテストする手段はありませんが、テンプレートを使用してみましたか?すべてのセルがテキストとしてフォーマットされた空のExcelファイルですか?
この場合、Apache-POI 3.15を使用しており、同じ問題が発生したため、スタイルでデータを検証しました。0より大きい数値と文字列が必要です。
try {
if (Integer.parseInt(field + "") >= 0) {
int valor = Integer.parseInt(field + "");
cell.setCellValue(valor); //Int
}
} catch (NumberFormatException nfe) {
// no int
try {
if (Double.parseDouble(field + "") >= 0) {
double valor = Double.parseDouble(field + ""); //double
cell.setCellValue(valor);
}
} catch (NumberFormatException nfe2) {
cell.setCellValue(field + ""); //String
}
}
Apache POI 4.0.1の場合:
XSSFSheet sheet = workbook.createSheet("MySheetName");
sheet.addIgnoredErrors(new CellRangeAddress(0, 9999, 0, 9999), IgnoredErrorType.NUMBER_STORED_AS_TEXT);
シートを org.Apache.poi.xssf.usermodel.XSSFSheet にキャストし、 org.Apache.poi.ss.usermodel.Sheet にキャストしないように注意してください。それ以外の場合、メソッドはaddIgnoredErrorsは不明です。