将数组保存到xls文件中


Save array into xls file

我希望将我的二维数组保存到.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'
    }
}

这将相应地格式化单元格,以添加正确数量的前导零。如果所有其他操作都失败了,这是设置正确格式

的一个相当好的方法