在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)才会出现此问题。
答案 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);
}
希望没有隐藏的后果。