2014-10-02 104 views
2

在我先前将整个第一列格式化为日期的Excel表格中,后来将所使用的单元格格式更改为常规(单元格A1至A11)。因此,从单元格A12开始,第一列仍然具有以前的日期格式。 当我尝试使用第一列(A1,A2,...,A11)的值时,它将它们的格式标识为日期,并给出错误的结果。PHPExcel采用空单元格格式

例如,这retruns日期格式(d /月/年),这是不是这种情况(参见图片)

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

而且整个列具有以下格式:

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

有没有办法确保单元格本身的格式被考虑? (当我表示这个细胞明确地,使用正确的格式的格式)

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

enter image description here

回答

2

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

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

因为你已经改变了A1的唯一格式,以A11,其余仍使用旧的格式。所以设置整列/行的格式将会解决这个问题

+0

感谢您的回复。尝试此(其中工程): $ sheet-> getStyle('A1:A20') - > getNumberFormat() - > setFormatCode('General'); 但是,应该有一个通用的方法来做到这一点(我的意思是:采取单元格的实际格式,而不是强制'一般'格式) – user2992220 2014-10-03 07:12:21

+0

嗯,这是我的解决方案,但它只设置所有的格式A * 细胞。另外setFormatCode从常量中获取样式,使用它们是很好的。 – 2014-10-05 08:09:18

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); 
} 

希望没有隐藏的后果。