2016-05-04 58 views
2

我正在使用PHPExcel库,以便对4列柱状图进行总结。我设法做到了这一点,但现在我想改变列的颜色,我没有找到任何方法来做到这一点。任何帮助将非常感激。PHPExcel更改柱状图的颜色

这是我建立我的excel文件

private function createReport($result = null, $pdf = false) { 

    if ($result != null) { 

     $nameFile = "List"; 

     $objPHPExcel = new PHPExcel(); 
     $objPHPExcel->getProperties()->setCreator('App')->setTitle($nameFile)->setSubject("S") 
      ->setCategory("Test data"); 

     $objWorksheet = $objPHPExcel->getActiveSheet(); 
     $charstSheet = $objPHPExcel->createSheet(); 
     $charstSheet->setTitle("Summary"); 

     $columnArea = "A"; 
     $columnCount = "B"; 

     $indexSheet = 0; 
     foreach ($result as $result_value_index => $result_value) { 

      if ($indexSheet > 0) { 
       $sheet = $objPHPExcel->createSheet($indexSheet); 
       $dataSheetTitle = 'Worksheet' . $result_value_index; 
       $sheet->setTitle($dataSheetTitle); 
      } 

      $objPHPExcel->setActiveSheetIndex($indexSheet); 
      $objWorksheet = $objPHPExcel->getActiveSheet(); 
      $objWorksheet->setSheetState(PHPExcel_Worksheet::SHEETSTATE_HIDDEN); 

      $row = 0; 
      $currentArea = null; 

      for ($j = 0; $j < count($result[$result_value_index]); $j++) { 

       $currentArea = $result[$result_value_index][$j]; 
       $row = $j + 1; 

       $objWorksheet->setCellValue($columnArea . $row, $currentArea['Area_name']); 
       $objWorksheet->setCellValue($columnCount . $row, $currentArea['ToDo_count']); 
      } 

      $sheetTitle = $objWorksheet->getTitle(); 
      $dataSeriesLabels = array(
       new PHPExcel_Chart_DataSeriesValues('String', $sheetTitle . '!$A$1', NULL, 1) 

      );     

      $xAxisTickValues = array(
       new PHPExcel_Chart_DataSeriesValues('String', $sheetTitle . '!$A$1:$A$' . $row, NULL, $j), // Q1 to Q4 
      ); 

      $dataSeriesValues = array(
       new PHPExcel_Chart_DataSeriesValues('Number', $sheetTitle . '!$B$1:$B$' . $row, NULL, $j), 
      ); 

      // Build the dataseries 
      $series = new PHPExcel_Chart_DataSeries(
       PHPExcel_Chart_DataSeries::TYPE_BARCHART,  // plotType 
       PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping 
       range(0, count($dataSeriesValues) - 1),   // plotOrder 
       $dataSeriesLabels,        // plotLabel 
       $xAxisTickValues,        // plotCategory 
       $dataSeriesValues        // plotValues 
      ); 

         $series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL); 

          $plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series)); 

      $legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false); 

      $title = new PHPExcel_Chart_Title(); 
      if ($currentArea != null) { 
       $calculationEngine = PHPExcel_Calculation::getInstance($objPHPExcel); 
       $average = round($calculationEngine->calculateFormula('=AVERAGE(B1:B' . $row . ")")); 
       $title = new PHPExcel_Chart_Title($currentArea['ParentAreaName'] . " - Promedio ≈ " . $average . " reservas"); 
      } 

      $yAxisLabel = new PHPExcel_Chart_Title('Reservas'); 


      // Create the chart 
      $chart = new PHPExcel_Chart(
       'chart1',  // name 
       $title,   // title 
       NULL,  // legend 
       $plotArea,  // plotArea 
       true,   // plotVisibleOnly 
       0,    // displayBlanksAs 
       NULL,   // xAxisLabel 
       $yAxisLabel  // yAxisLabel 
      ); 

      // Set the position where the chart should appear in the worksheet 

      $chart->setTopLeftPosition('A' . ($indexSheet * 20 + 1)); 
      $chart->setBottomRightPosition('N' . ($indexSheet * 20 + 20)); 

      // Add the chart to the worksheet 
      $charstSheet->addChart($chart); 

      $indexSheet++; 
     } 

     $objPHPExcel->setActiveSheetIndexByName("Resumen"); 


     if (!$pdf){ 
      $this->export_excel($objPHPExcel, $nameFile); 
     } else { 
      $this->export_pdf($objPHPExcel, $nameFile); 
     } 
    } 
} 

这是我如何导出到Excel

public function export_excel($objPHPExcel,$nameFile){ 

     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007'); 

     $objWriter->setIncludeCharts(TRUE); 
     $date = new DateTime(); 
     $nameFile = $nameFile.'_'.$date->getTimestamp().'.xlsx'; 
     $objWriter->save('outputfiles/'. $nameFile); 
     $url = Router::url('/outputfiles/', true). $nameFile; 
     $this->set(array('url' =>$url,'_serialize' => array('url'))); 
    } 
+0

@ Fred -ii,@GrumpyCrouton,对不起,我不是问如何改变单元格的颜色,我看到了,我想改变图表中条形的颜色。 – lfal

回答

2

我认为这是一个哈克解决方案,但我并没有在那一刻任何公开的发现方法,允许我改变颜色。我通过在位于PhpExcel/Writer/Excel2007文件夹中的主题文件的第122行中更改变量'accent1'的值来解决此问题。请注意,我正在使用Excel2007进行编写。

我发布这个万一任何人认为它有用。

+0

你有这个解决方案吗?发布请 –

+0

@Marcelo费利佩圣地牙哥迪尼兹,我更新了答案,以便更清楚。我希望它对你有用 – lfal

+0

如果我明白了,你已经在文件中更改了,是吗? –