使用PHPExcel编写和导出Excel文件

时间:2014-11-04 20:51:01

标签: php phpexcel

我正在尝试用我通过我所制作的方法过滤的数据填充我的Excel表格。现在我得到一张表但我只有一行填充而不是另一行它没有得到我通过我的对象提供的数据

我正在尝试与此表相似的表格。 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

**请建议我如何以优化的方式在下一行中获取这些百分比值。 现在我只能循环遍历那个阵列的样本[名字](爱好者,猎人,新射手等)。 ** 提前谢谢

2 个答案:

答案 0 :(得分: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++;
}

答案 1 :(得分:0)

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

好像你正在将一个数组$line写入一个单元格。你应该做一个从0到count($ line)的循环来把每个元素放到一个单元格中吗?