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

(从评论中提升...)

添加数据后调用代码

Any reason why? While it is possible, it is simpler, and less error prone, to format while populating the sheet. Assuming the query column data type is numeric (not varchar or something), you should be able to call SpreadsheetFormatColumn for that column, after adding the query data.

话虽如此,您首先收到“数字存储为文本”警告的事实让我想知道您的查询列的数据类型。IIRC,CF 的更高版本应在使用SpreadsheetAddRows时检测数字列,并自动将数字格式应用于这些列。您的查询列是否可能被格式化为字符串而不是某种数字类型?因为这可以解释结果。解决方案是将列转换为 db 查询中的数字类型。

于 2016-09-24T12:38:41.493 回答