ColdFusion - POI Excel工作簿格式为数字

时间:2016-09-19 19:51:00

标签: coldfusion apache-poi coldfusion-10 cfspreadsheet

我正在使用ColdFusion和POI工作簿创建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);           
    }
}   

Books Online reference

1 个答案:

答案 0 :(得分:1)

(从评论中推广......)

  

在添加数据后调用代码

有什么理由?尽管有可能,但在填充工作表时进行格式化更简单,且更不容易出错。假设查询列数据类型是数字(不是varchar或其他),您应该能够在添加查询数据后为该列调用SpreadsheetFormatColumn

话虽如此,您首先得到“Number as as text”警告,这让我对您的查询列的数据类型感到疑惑。 IIRC,CF的更高版本应在使用SpreadsheetAddRows时检测数字列,并将数字格式自动应用于。您的查询列是否可能被格式化为字符串而不是某种数字类型?这可以解释结果。解决方案是将列转换为db查询中的数字类型。