2014-11-04 58 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