将数组保存到xls文件中

时间:2013-07-26 13:47:58

标签: php phpexcel

我希望将我的二维数组保存到.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文件中?

1 个答案:

答案 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'
    }
}

相应地格式化单元格,以添加正确数量的前导零。如果所有其他方法都失败了,这是设置正确格式的一种相当好的方法