我正在使用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);
}
}
答案 0 :(得分:1)
(从评论中推广......)
在添加数据后调用代码
有什么理由?尽管有可能,但在填充工作表时进行格式化更简单,且更不容易出错。假设查询列数据类型是数字(不是varchar或其他),您应该能够在添加查询数据后为该列调用SpreadsheetFormatColumn。
话虽如此,您首先得到“Number as as text”警告,这让我对您的查询列的数据类型感到疑惑。 IIRC,CF的更高版本应在使用SpreadsheetAddRows时检测数字列,并将数字格式自动应用于列。您的查询列是否可能被格式化为字符串而不是某种数字类型?这可以解释结果。解决方案是将列转换为db查询中的数字类型。