2016-09-19 54 views
0

ColdFusionおよびPOIワークブックを使用してExcelファイルを作成しています。ファイルは素晴らしいですが、数値の値を含むセルがあり、SUMやその他の関数が正常に動作するためには数値として格納する必要があります。ColdFusion - POI Excelワークブックの書式番号:

基本的にデータをループするExcelシートのデータが追加された後にコードを呼び出し、値が数値の場合はデータ形式を数値として設定します。そのようにしてExcelファイルを開くと、そのデータ列にSUMなどを実行できます。

以下は私が今まで試したことですが、すべてのセルに#EBBEBEの背景色があるため「動作」しますが、以下に示す「テキストとして保存された番号」という警告が残ります。これをどうすれば解決できますか?

(...コメントから昇格)
// Create our dataFormat object 
df = poiWorkbook.createDataFormat(); 
// Create our new style 
formatNumber = poiWorkbook.createCellStyle(); 
formatNumber.setFillPattern(formatEvenRowRightAlignStyle.SOLID_FOREGROUND); 
formatNumber.setAlignment(formatNumber.ALIGN_RIGHT); 
XSSFColor = createObject("java", "org.apache.poi.xssf.usermodel.XSSFColor"); 
formatNumber.setFillForegroundColor(XSSFColor.init(Color.decode("##EBEBEB")));  
formatNumber.setDataFormat(df.getFormat("0.00")); 
// Loop over the data and apply the format 
for (x=0;x<rowCount;x++) { 
    for (y=0;y<colCount;y++) { 
     poiSheet.getRow(x).getCell(y).setCellStyle(formatNumber);   
    } 
} 

enter image description here

+0

*データが追加された後のコールコード*何らかの理由がありますか?これは可能ですが、シートにデータを取り込みながら書式を設定する方が簡単で、エラーが発生しにくいでしょう。 – Leigh

+0

@Leigh - 理由は私がすべてのデータをCFクエリーに組み込み、SpreadsheetAddRows(sheet、query)メソッドを使用してCFクエリーを追加するからです。 – Phil

+0

@Leigh - すべてのデータを追加した後、ワークブックをループし、必要に応じて書式を適用します – Phil

答えて

1

データの後に呼び出しコードは、任意の理由

を追加されましたか?それは可能ですが、シートにデータを取り込みながら書式を設定する方が簡単で、エラーが発生しにくい方法です。クエリ列データ型が数値(varcharまたは何かではない)であると仮定すると、クエリデータを追加した後で、その列に対してSpreadsheetFormatColumnを呼び出すことができます。

最初に「数値がテキストとして保存されています」の警告が表示されているということは、クエリの列のデータ型が不思議です。 IIRCの後のバージョンのCFでは、SpreadsheetAddRowsが使用されているときに数値列が検出され、これらの列には数値形式が自動的に適用されます。クエリ列が数値型の代わりに文字列として書式設定されている可能性はありますか?それは結果を説明するでしょう。解決策は、dbクエリ内の数値型に列をキャストすることです。