我希望将我的二维数组保存到.xls文件中。如果使用此代码,则保存的数据不带前导零:
$arr = array(
array("01", "02", "03"),
array("001", "02", "03"),
array("00001", "02", "03"),
);
// include PHPExcel library
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->fromArray($arr);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save("file.xls");
如果使用此功能,01
将保存为00001
:
......
$objPHPExcel->getActiveSheet()->fromArray($arr);
$objPHPExcel->getActiveSheet()->getStyle('A1:C3')->getNumberFormat()->setFormatCode("00000");
.....
我该如何解决这个问题?如何正确地将数组中的原始数据保存到.xls文件中?
答案 0 :(得分:1)
尝试将单元格设置为 text 格式:
$objPHPExcel->getActiveSheet()->getStyle('A1:C3')->getNumberFormat()->setFormatCode('@');
或循环遍历数组,根据字符串的长度(->setFormatCode(str_repeat('0', strlen($arrElem));
设置格式,但这样就像在数组上循环一样愚蠢,并明确设置每个值:
$objPHPExcel->->getCell('A1')->setValueExplicit($arr[0][0], PHPExcel_Cell_DataType::TYPE_STRING);
这里也可能有一种直言不讳的方法:
$objPHPExcel->getDefaultStyle()
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
这应该将默认格式设置为txt。
smokey(我建议)每次迭代使用数字格式。
$col = range('A','C');
$cell = '';
foreach($arr as $colIndex => $vals)
{
$cell = $col[$colIndex];//the first array will be $col[0] === A
foreach($vals as $row => $val)
{
$cell .= $row +1;//A.(0+1) -->A1
$objPHPExcel->getCell($cell)
->getNumberFormat()
->setFormatCode(str_repeat('0', strlen($val)));
//for 001, this is str_repeat('0',3) or '000'
}
}
相应地格式化单元格,以添加正确数量的前导零。如果所有其他方法都失败了,这是设置正确格式的一种相当好的方法