2013-07-26 227 views
0

我希望将我的2维数组保存到.xls文件中。如果使用此代码,将数据保存无前导零:将数组保存到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

将strlen()设置为“strlen()”然后使用'str_repeat()设置格式是否可行? – SmokeyPHP

+0

@ SmokeyPHP ---你的意思是让这个循环?为每个元素来数组? – RIKI

回答

1

尝试将细胞设置为文本格式而不是:根据所述字符串的长度(->setFormatCode(str_repeat('0', strlen($arrElem));

$objPHPExcel->getActiveSheet()->getStyle('A1:C3')->getNumberFormat()->setFormatCode('@'); 
通过阵列

或环,设置格式,但是这将是作为傻作为循环过阵列,并明确设定每个值:

$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' 
    } 
} 

这相应地格式化的单元格,以添加前导零的正确的金额。如果一切都失败了,这是设置正确格式的一个很好的方法

+0

'尝试将单元格设置为文本格式---请告诉如何做到这一点? – RIKI

+0

@OTARIKI:好的,我的第一个代码片段是:'setFormatCode('@')'应该可以做到这一点,但是您也可以将默认样式设置为文本格式(添加编辑中的代码) –

+0

@OTARIKI:也可以使用手动方法(根据'$ arr'中的字符串逐个单元格设置数字格式 –