PHPExcel采用空单元格格式

时间:2014-10-02 13:34:49

标签: php phpexcel

在excel表格中,我首先将整个第一列格式化为日期,然后我将使用过的单元格的格式更改为General(单元格A1到A11)。因此,从单元格A12开始,第一列仍然具有先前的日期格式。 当我尝试使用第一列(A1,A2,...,A11)的值时,它将其格式标识为日期,并给出错误的结果。

例如,这会重新生成日期格式(d / mm / yyyy),但事实并非如此(见图)

$sheet->getStyle('A3')->getNumberFormat()->getFormatCode();

整栏也有这种格式:

$sheet->getStyle('A')->getNumberFormat()->getFormatCode();    

有没有办法确保考虑单元格本身的格式? (当我明确指出这个单元格的格式时,使用了正确的格式)

经过一番调查后发现,只有.xlsx文件(使用阅读器PHPExcel_Reader_Excel2007)而不是.xls文件(阅读器PHPExcel_Reader_Excel5)才会出现此问题。

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以设置整个行/列格式:

$sheet->getStyle('A')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);

因为您只将A1的格式更改为A11,所以其余格式仍为旧格式。因此,整列/行的设置格式将解决此问题

答案 1 :(得分:0)

经过一些更多的调查后发现了读者可能的原因Excel2007.php。

条件有问题设置样式时(第933行):

if ($c["s"] && !$this->_readDataOnly) {
  $cell->setXfIndex(isset($styles[intval($c["s"])]) ? intval($c["s"]) : 0);
}

在常规单元格格式的情况下,未定义$ c [“s”],并且未设置单元格的_xfIndex(未传递if语句)。这给了(我没有找到原因)存储单元的_xfIndex问题。

删除$ c [“s”]条件时,设置了正确的样式。

if (/*$c["s"] &&*/ !$this->_readDataOnly) {
  $cell->setXfIndex(isset($styles[intval($c["s"])]) ? intval($c["s"]) : 0);
}

希望没有隐藏的后果。