PHPExcel图形设计(边框,图形颜色,图形内部位置)

use*_*568 5 php phpexcel

我正在使用PHPExcel来构建包含多个图表的Excel工作表,并尝试自定义它们.我只有3个问题未解决:1.我希望图表没有边框.2.我想改变图线的颜色.3.我想改变图形区域内图形的位置.至于现在这是我构建图表的方式:

$xAxisTickValues = $TruexAxisTickValues;
$series = new PHPExcel_Chart_DataSeries(
  PHPExcel_Chart_DataSeries::TYPE_LINECHART,        // plotType
  PHPExcel_Chart_DataSeries::GROUPING_STANDARD,     // plotGrouping
  range(0, 10),                                 // plotOrder
  null,                                         // plotLabel
  $xAxisTickValues,                                 // plotCategory
  $values                                           // plotValues
);
$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL);
$plotarea = new PHPExcel_Chart_PlotArea(null, array($series));
$chart = new PHPExcel_Chart(
  'chart1',                                       // name
  null,                                           // title
  null,                                         // legend
  $plotarea,                                      // plotArea
  true,                                           // plotVisibleOnly
  0,                                              // displayBlanksAs
  null,                                           // xAxisLabel
  null                                            // yAxisLabel
);
$chart->setTopLeftPosition('C5' );
$chart->setBottomRightPosition('J11' );
$sheet->addChart($chart);   
Run Code Online (Sandbox Code Playgroud)

有没有办法做这个定制图?

III*_*III 7

正如Rzangue所说,PHPExcel目前不提供这样做的简单方法,但是,如果您不介意对使用PHPExcel创建的所有图形进行硬编码,您可以将下面建议的更改添加到PHPExcel/Classes/Writer中/Excel2007/Chart.php文件.

要在公共函数writeChart()中更改图表的边框颜色,请添加:

$cBorderColor = "000000";
$objWriter->startElement('c:spPr');
    $objWriter->startElement('a:ln');
        $objWriter->startElement('a:solidFill');
            $objWriter->startElement('a:srgbClr');
                $objWriter->writeAttribute('val',$cBorderColor);
            $objWriter->endElement();
        $objWriter->endElement();
    $objWriter->endElement();
 $objWriter->endElement();
Run Code Online (Sandbox Code Playgroud)

后:

    $objWriter->startElement('c:showDLblsOverMax');
        $objWriter->writeAttribute('val', 0);
    $objWriter->endElement();

$objWriter->endElement();
Run Code Online (Sandbox Code Playgroud)

但之前:

$this->_writePrintSettings($objWriter); 
Run Code Online (Sandbox Code Playgroud)

它应该在Chart.php文件的第106行附近.

显然用您希望成为图表边框颜色的任何网页颜色替换"000000".要完全删除边框颜色,请插入:

$objWriter->startElement('c:spPr');
    $objWriter->startElement('a:ln');
        $objWriter->startElement('a:noFill');
        $objWriter->endElement();
    $objWriter->endElement();
$objWriter->endElement();
Run Code Online (Sandbox Code Playgroud)

代替.

接下来,要更改图表中绘图区域的位置,请在Chart.php文件中向下滚动到私有函数_writeLayout().

删除除打开/关闭括号外的功能中的所有代码{}.在函数内,添加:

$layoutTarget = "inner";
$xMode = "edge";
$yMode = "edge";
$xOffset = 0.1;  //The left margin in percentage of graph width.
$yOffset = 0.1;  //The top margin in percentage of graph width.
$paWidth = 0.9;  //The percentage width of the plot area relative to the graph width;
$paHeight = 0.9; //The percentage height of the plot area relative to the graph height;

$objWriter->startElement('c:layout');
    $objWriter->startElement('c:manualLayout');
        $objWriter->startElement('c:layoutTarget');
            $objWriter->writeAttribute('val',$layoutTarget);
        $objWriter->endElement();
        $objWriter->startElement('c:xMode');
            $objWriter->writeAttribute('val',$xMode);
        $objWriter->endElement();
        $objWriter->startElement('c:yMode');
            $objWriter->writeAttribute('val',$yMode);
        $objWriter->endElement();
        $objWriter->startElement('c:x');
            $objWriter->writeAttribute('val',$xOffset);
        $objWriter->endElement();
        $objWriter->startElement('c:y');
            $objWriter->writeAttribute('val',$yOffset);
        $objWriter->endElement();
        $objWriter->startElement('c:w');
            $objWriter->writeAttribute('val',$paWidth);
        $objWriter->endElement();
        $objWriter->startElement('c:h');
            $objWriter->writeAttribute('val',$paHeight);
        $objWriter->endElement();
    $objWriter->endElement(); 
$objWriter->endElement();
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据需要调整x/y偏移和w/h.

要控制/更改每个数据系列的颜色,请执行以下操作:

private function _writePlotGroup()
Run Code Online (Sandbox Code Playgroud)

之前:

foreach($plotSeriesOrder as $plotSeriesIdx => $plotSeriesRef) {
Run Code Online (Sandbox Code Playgroud)

加:

$ci=-1;
$colorNDX=array();
$colorNDX[0] = "111111";
$colorNDX[1] = "222222";
$colorNDX[2] = "333333";
$colorNDX[3] = "444444";
$colorNDX[4] = "555555";
$colorNDX[5] = "666666";
$colorNDX[6] = "777777";
Run Code Online (Sandbox Code Playgroud)

等等,确保为所有系列数据添加足够的颜色索引,并明显将111111,222222,333333更改为您喜欢的网页颜色.

此外,之后:

foreach($plotSeriesOrder as $plotSeriesIdx => $plotSeriesRef) {
Run Code Online (Sandbox Code Playgroud)

加:

$ci++;
Run Code Online (Sandbox Code Playgroud)

之后:

//  Labels
$plotSeriesLabel = $plotGroup->getPlotLabelByIndex($plotSeriesRef);
if ($plotSeriesLabel && ($plotSeriesLabel->getPointCount() > 0)) {
    $objWriter->startElement('c:tx');
    $objWriter->startElement('c:strRef');
        $this->_writePlotSeriesLabel($plotSeriesLabel, $objWriter);
    $objWriter->endElement();
$objWriter->endElement();
}
Run Code Online (Sandbox Code Playgroud)

加:

$objWriter->startElement('c:spPr');
    $objWriter->startElement('a:solidFill');
        $objWriter->startElement('a:srgbClr');
            $objWriter->writeAttribute('val',$colorNDX[$ci]);
        $objWriter->endElement();
    $objWriter->endElement();
$objWriter->endElement();
Run Code Online (Sandbox Code Playgroud)

如果这有帮助,请告诉我.同样,这些更改将应用​​于PHPExcel生成的所有图表,但是,一些好的if语句应该足以使每个图表类型的更改更加动态.


小智 1

当前版本:PHPExcel 1.7.9 不允许做任何你想做的事情。