我希望将我的二维数组保存到.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文件中?
尝试将单元格设置为文本格式:
$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'
}
}
这将相应地格式化单元格,以添加正确数量的前导零。如果所有其他操作都失败了,这是设置正确格式