0

ColdFusion と POI Workbook を使用して Excel ファイルを作成しています。ファイルはうまく作成されていますが、数値を含むセルがあり、SUM やその他の関数が正しく機能するために数値として保存する必要があります。

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

以下は私がこれまでに試したことであり、すべてのセルの背景色が #EBEBEB であるため「機能」しますが、以下に示すように「数値がテキストとして保存されています」という警告がまだ表示されます。どうすればこれを修正できますか?

// 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);           
    }
}   

ここに画像の説明を入力

4

1 に答える 1

1

(コメントから昇格...)

データが追加された後にコードを呼び出す

何か理由は?可能ですが、シートにデータを入力しながらフォーマットする方が簡単で、エラーが発生しにくくなります。クエリ列のデータ型が数値 (varchar などではない) であると仮定すると、クエリデータを追加した後、その列に対してSpreadsheetFormatColumnを呼び出すことができるはずです。

そうは言っても、最初に「テキストとして保存された数値」という警告が表示されるという事実は、クエリ列のデータ型について疑問に思います。IIRC 以降のバージョンの CF では、SpreadsheetAddRowsが使用されている場合に数値列を検出し、それらの列に数値形式を自動的に適用する必要があります。クエリ列が数値型ではなく文字列としてフォーマットされている可能性はありますか? それが結果を説明するように。解決策は、db クエリ内で列を数値型にキャストすることです。

于 2016-09-24T12:38:41.493 に答える