2013-07-26 139 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'中的字符串逐個單元格設置數字格式 –