2014-11-04 61 views
1

我試圖填補我的Excel工作表與我通過我做的方法過濾數據。現在我得到一個片,但我只有只有一排裝滿不是其他它沒有得到我提供它,雖然我的目標寫作和導出Excel文件使用PHPExcel

我想我類似這樣一張一張的東西的數據。 desired sheet

我試圖在這部分代碼編寫代碼:

public function export($Sets,$disp_filter) 
{ 

$objPHPExcel = new PHPExcel(); 
$objPHPExcel->getProperties()->setTitle("Offic excel Test Document"); 
$styleArray = array(
'font' => array(
    'bold' => true, 
    'color' => array('rgb' => 'FF0000'), 
    'size' => 10, 
    'name' => 'Verdana' 


)); 
$objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray($styleArray); 

    $excel_out = array($this->outputSampleName($Sets)); 
    // var_dump($excel_out); 
    // exit; 


    $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Sample Size and Margin of Error'); 
    $rowCount = 2; 


    foreach ($excel_out as $key=> $line) 
    { 
      $colCount = 'A'; 
      $i=0; 
      // $line = array($Set['name']); 
      // $CT = $Set['crossTabs']['base']; 
      // $Moe = array($CT['sample']['moe']); 

    foreach($line as $col_value) 
    { 
     // var_dump($col_value); 
     // exit; 
     $objPHPExcel->getActiveSheet()->setCellValue($colCount.$rowCount, $col_value[$i]) 
     ->getStyle($colCount.$rowCount)->applyFromArray($styleArray); 
     $colCount++; 
    } 
$rowCount++; 
$i++; 
    } 
return $objPHPExcel; 

} 



protected function outputSampleName($Sets) 
{ 

    foreach ($Sets as $Set) 
    { 
     $CT = $Set['crossTabs']['base']; 
     $line = array(
      $Set['name'], 

      $CT['sample']['moe'] . '%' 

     ); 

     $excel_out []= $line; 
    } 

    return $excel_out; 
} 

當我用的var_dump($ excel_out) 看,我有這樣的數據結構:

enter image description here

excel sheet downloaded

**請給我建議我怎麼才能以優化的方式在我的下一行中獲得這些百分比值。 爲現在,我只能通過樣品[名稱]從該陣列環路,它是(愛好者,獵人,新射手等)。 ** 由於事先

回答

0
$objPHPExcel->getActiveSheet()->setCellValue($colCount.$rowCount, $line); 

好像你正在寫一個數組$line進入細胞。你應該做一個循環從0到count($ line)把每個元素放到一個單元格中嗎?

+0

你的意思是體內多了一個循環,foreach循環 – Maggi 2014-11-04 21:06:32

+0

是,類似@kRiZ答案,但與$行的元素 – 2014-11-04 21:42:27

1

也許是因爲你的數組元素的數組自己,你想把這些子陣列放入細胞。

嘗試在不同的電池設置的$line每個元素:

foreach ($excel_out as $line) 
{ 
    $colCount = 'A'; 

     $objPHPExcel->getActiveSheet() 
      ->setCellValue('A'.$rowCount, $line[0]) 
      ->setCellValue('B'.$rowCount, $line[1]) 
      ->setCellValue('C'.$rowCount, $line[2]) 
      ->setCellValue('D'.$rowCount, $line[3]) 
      ->setCellValue('E'.$rowCount, $line[4]); 
     $colCount++; 

    $rowCount++; 
} 

注意,第一子陣列中$excel_out僅具有一個元素。你可能想要存儲。 你也可以使用一個內部循環通過每個$line遍歷。

編輯:

看着你的答案代碼後。

使用內循環:

oreach ($excel_out as $key=> $line) 
{ 
     $colCount = 'A'; 
     $i = 0; 
     foreach($line as $col_value) 
     { 
      // var_dump($col_value); 
      // exit; 
      $objPHPExcel->getActiveSheet()->setCellValue($colCount.$rowCount, $col_value[$i]); 
     //$objPHPExcel->getActiveSheet()->setCellValue('B'.$rowCount, $col_value[1]); 
     //$objPHPExcel->getActiveSheet()->setCellValue('C'.$rowCount, $col_value[2]); 
     //$objPHPExcel->getActiveSheet()->setCellValue('D'.$rowCount, $col_value[3]); 
     //$objPHPExcel->getActiveSheet()->setCellValue('E'.$rowCount, $col_value[4]); 
     //$objPHPExcel->getActiveSheet()->setCellValue('F'.$rowCount, $col_value[5]); 
     $colCount++; 
     $i++; 
     //$rowCount++; 
    } 
    $rowCount++; 
    // $colCount++; 
} 
+0

噢肯定的循環,能夠簡化它小律點..謝謝 – Maggi 2014-11-04 22:11:47

+0

我不明白你的意思是在你的回答有關循環通過每個標題... – kRiZ 2014-11-04 22:37:48