【问题标题】:Writing and Exporting Excel file Using PHPExcel使用 PHPExcel 编写和导出 Excel 文件
【发布时间】:2015-09-04 12:35:41
【问题描述】:

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

我正在尝试我的工作表类似于此工作表。

我正在尝试在这部分代码中编写代码:

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) 我有这个数据结构:

**请建议我如何以优化的方式在下一行中获得这些百分比值。 现在我只能遍历来自该数组的样本[名称](爱好者、猎人、新射手等)。 ** 在此先感谢

【问题讨论】:

    标签: php phpexcel


    【解决方案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++;
    }
    

    【讨论】:

    • 我不明白你在回答中关于循环遍历每个标题的意思...
    【解决方案2】:
    $objPHPExcel->getActiveSheet()->setCellValue($colCount.$rowCount, $line);
    

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

    【讨论】:

    • 你的意思是在 foreach 循环的主体中多了一个循环
    • 是的,类似于@kRiZ 的答案,但带有 $line 元素的循环
    猜你喜欢
    • 2014-12-20
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多