POI - 以HH:MM:SS.sss格式处理数据

时间:2014-10-15 07:05:54

标签: java excel apache-poi

我正在一个项目中工作,我有HH:MM:SS.sss格式的数据,我必须在Excel / Spreadsheet中生成报告。我正在使用POI生成excel文件,但我遇到了以下问题:

  1. 如果我以字符串格式设置数据,即cell.setCellValue("02:45:6.7");,则无法使用averagesum等Excel公式。即使我在{[h]:mm:ss.000;@格式化单元格{1}}即cs.setDataFormat(df.getFormat("[h]:mm:ss.000;@"))不起作用,因为它是字符串。

    HSSFCellStyle cs = hssfworkbook.createCellStyle(); HSSFDataFormat df = hssfworkbook.createDataFormat(); cs.setDataFormat(df.getFormat("[h]:mm:ss.000;@"));

  2. Excel没有以hh:mm:ss.sss格式获取数据的任何功能(据我所知),我尝试使用'TIME(HH,MM,SS)'并将单元格格式化为{{1小数点后面的值不会显示为000,即[h]:mm:ss.000;@

  3. 我尝试对POI源代码进行更改,我尝试了这个问题中的步骤https://stackoverflow.com/a/10306350/2513084但它仍然不起作用。生成的文件说 - 此文件的某些公式或名称包含Kingsoft Spreadsheet不支持的内置函数,重新计算这些公式或名称可能会导致错误的结果。 Microsoft Office无法打开它给出错误的文件文件错误:数据可能已丢失。

1 个答案:

答案 0 :(得分:0)

我很长一段时间没有和POI合作,但据我记得......日期不过是数字(毫秒)。只有单元格类型被定义为日期/数字单元格。

然后在其他地方定义细胞的实际视觉表示。

我的一些旧代码(可能不是最新的POI版本有此声明):

HSSFCell cell = newRow.createCell(column);

Date date = new Date(some_date_value); 
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(date);

您可以将单元格样式(显示格式)设置为:

cell.setCellStyle(style);

所以我会深入研究style部分......以及如何设置它(抱歉这个部分没有工作示例)。也许它可以与您的代码一起使用...因为您没有将值设置为数字而是设置为字符串。