利用phpspreadsheet导出Excel图表(折线图、饼状图、柱状图)
创始人
2024-03-07 21:33:27
0

利用phpspreadsheet导出Excel图表

  • 安装 phpoffice/phpspreadsheet
    • 折线图
      • 需要使用的包
      • 实例代码
      • 效果图![实例图]()
    • 饼状图
      • 需要使用的包
      • 实例代码
      • 效果图
    • 柱状图
      • 需要使用的包
      • 实例代码
      • 效果图

安装 phpoffice/phpspreadsheet

composer require phpoffice/phpspreadsheet

折线图

需要使用的包

use PhpOffice\PhpSpreadsheet\Chart\Chart;
use PhpOffice\PhpSpreadsheet\Chart\DataSeries;
use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues;
use PhpOffice\PhpSpreadsheet\Chart\Layout;
use PhpOffice\PhpSpreadsheet\Chart\Legend as ChartLegend;
use PhpOffice\PhpSpreadsheet\Chart\PlotArea;
use PhpOffice\PhpSpreadsheet\Chart\Properties;
use PhpOffice\PhpSpreadsheet\Chart\Title;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

实例代码

$spreadsheet = new Spreadsheet();$worksheet = $spreadsheet->getActiveSheet();$worksheet->fromArray([['', 2010, 2011, 2012],['Q1', 12, 15, 21],['Q2', 56, 73, 86],['Q3', 52, 61, 69],['Q4', 30, 32, 0],]);$dataSeriesLabels = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012];$dataSeriesLabels[0]->setFillColor('FF0000');$xAxisTickValues = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4];$dataSeriesValues = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4),new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4),new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4),];$dataSeriesValues[2]->setLineWidth(60000 / Properties::POINTS_WIDTH_MULTIPLIER);// Build the dataseries$series = new DataSeries(DataSeries::TYPE_LINECHART, // plotTypeDataSeries::GROUPING_STANDARD, // plotGroupingrange(0, count($dataSeriesValues) - 1), // plotOrder$dataSeriesLabels, // plotLabel$xAxisTickValues, // plotCategory$dataSeriesValues, // plotValuesnull,true);$series->setPlotDirection(DataSeries::DIRECTION_COL);// 把值标注在上面
//            $layout1 = new Layout();
//            $layout1->setShowVal(true);
//            $layout1->setShowPercent(true);
//            $plotArea = new PlotArea($layout1, [$series]);// Set the series in the plot area$plotArea = new PlotArea(null, [$series]);// Set the chart legend$legend = new ChartLegend(ChartLegend::POSITION_TOPRIGHT, null, false);$title = new Title('Test Stacked Line Chart');$yAxisLabel = new Title('Value ($k)');// Create the chart$chart = new Chart('chart1', // name$title, // title$legend, // legend$plotArea, // plotAreatrue, // plotVisibleOnlyDataSeries::EMPTY_AS_GAP, // displayBlanksAsnull, // xAxisLabel$yAxisLabel  // yAxisLabel);// Set the position where the chart should appear in the worksheet$chart->setTopLeftPosition('A7');$chart->setBottomRightPosition('o30');// Add the chart to the worksheet$worksheet->addChart($chart);// Save Excel 2007 file$filename = "test";header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8');header('Content-Disposition: attachment;filename="' . $filename . '.xlsx"');header('Cache-Control: max-age=0');ob_end_clean();$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');$writer->setIncludeCharts(true);$writer->save("php://output");$spreadsheet->disconnectWorksheets();

效果图实例图

饼状图

需要使用的包

use PhpOffice\PhpSpreadsheet\Chart\Chart;
use PhpOffice\PhpSpreadsheet\Chart\DataSeries;
use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues;
use PhpOffice\PhpSpreadsheet\Chart\Layout;
use PhpOffice\PhpSpreadsheet\Chart\PlotArea;
use PhpOffice\PhpSpreadsheet\Chart\Title;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Chart\Legend as ChartLegend;

实例代码

$spreadsheet = new Spreadsheet();$worksheet = $spreadsheet->getActiveSheet();$worksheet->fromArray([['', 2010, 2011, 2012],['Q1', 12, 15, 21],['Q2', 56, 73, 86],['Q3', 52, 61, 69],['Q4', 30, 32, 0],]);$dataSeriesLabels1 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011];$xAxisTickValues1 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4];$dataSeriesValues1 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4),];$series1 = new DataSeries(DataSeries::TYPE_PIECHART, // plotTypenull, // plotGrouping (Pie charts don't have any grouping)range(0, count($dataSeriesValues1) - 1), // plotOrder$dataSeriesLabels1, // plotLabel$xAxisTickValues1, // plotCategory$dataSeriesValues1          // plotValues);$layout1 = new Layout();$layout1->setShowVal(true);$layout1->setShowPercent(true);$plotArea1 = new PlotArea($layout1, [$series1]);$legend1 = new ChartLegend(ChartLegend::POSITION_RIGHT, null, false);$title1 = new Title('Test Pie Chart');$chart1 = new Chart('chart1', // name$title1, // title$legend1, // legend$plotArea1, // plotAreatrue, // plotVisibleOnlyDataSeries::EMPTY_AS_GAP, // displayBlanksAsnull, // xAxisLabelnull   // yAxisLabel - Pie charts don't have a Y-Axis);/**/$chart1->setTopLeftPosition('A7');$chart1->setBottomRightPosition('H20');$worksheet->addChart($chart1);$dataSeriesLabels2 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011];$xAxisTickValues2 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4];$dataSeriesValues2 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4),];$series2 = new DataSeries(DataSeries::TYPE_DONUTCHART, // plotTypenull, // plotGrouping (Donut charts don't have any grouping)range(0, count($dataSeriesValues2) - 1), // plotOrder$dataSeriesLabels2, // plotLabel$xAxisTickValues2, // plotCategory$dataSeriesValues2        // plotValues);$layout2 = new Layout();$layout2->setShowVal(true);$layout2->setShowCatName(true);$plotArea2 = new PlotArea($layout2, [$series2]);$title2 = new Title('Test Donut Chart');$chart2 = new Chart('chart2', // name$title2, // titlenull, // legend$plotArea2, // plotAreatrue, // plotVisibleOnlyDataSeries::EMPTY_AS_GAP, // displayBlanksAsnull, // xAxisLabelnull   // yAxisLabel - Like Pie charts, Donut charts don't have a Y-Axis);$chart2->setTopLeftPosition('I7');$chart2->setBottomRightPosition('P20');$worksheet->addChart($chart2);$filename = "test";header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8');header('Content-Disposition: attachment;filename="' . $filename . '.xlsx"');header('Cache-Control: max-age=0');ob_end_clean();$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');$writer->setIncludeCharts(true);$writer->save("php://output");$spreadsheet->disconnectWorksheets();

效果图

在这里插入图片描述

柱状图

需要使用的包

use PhpOffice\PhpSpreadsheet\Chart\Chart;
use PhpOffice\PhpSpreadsheet\Chart\ChartColor;
use PhpOffice\PhpSpreadsheet\Chart\DataSeries;
use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues;
use PhpOffice\PhpSpreadsheet\Chart\GridLines;
use PhpOffice\PhpSpreadsheet\Chart\Layout;
use PhpOffice\PhpSpreadsheet\Chart\Legend as ChartLegend;
use PhpOffice\PhpSpreadsheet\Chart\PlotArea;
use PhpOffice\PhpSpreadsheet\Chart\Properties;
use PhpOffice\PhpSpreadsheet\Chart\Title;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

实例代码

$spreadsheet = new Spreadsheet();$worksheet = $spreadsheet->getActiveSheet();$worksheet->fromArray([['', 2010, 2011, 2012],['Q1', 12, 15, 21],['Q2', 56, 73, 86],['Q3', 52, 61, 69],['Q4', 30, 32, 0],]);$colors = ['cccccc', '00abb8', 'b8292f', 'eb8500',];$dataSeriesLabels1 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011];$xAxisTickValues1 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4];$dataSeriesValues1 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4, [], null, $colors),];$labelLayout = new Layout();$labelLayout->setShowVal(true)->setLabelFontColor(new ChartColor('FFFF00'))->setLabelFillColor(new ChartColor('accent2', null, 'schemeClr'));$dataSeriesValues1[0]->setLabelLayout($labelLayout);$series1 = new DataSeries(DataSeries::TYPE_BARCHART, // plotTypenull, // plotGrouping (Pie charts don't have any grouping)range(0, count($dataSeriesValues1) - 1), // plotOrder$dataSeriesLabels1, // plotLabel$xAxisTickValues1, // plotCategory$dataSeriesValues1          // plotValues);$layout1 = new Layout();$layout1->setShowVal(true);$layout1->setShowPercent(true);$plotArea1 = new PlotArea($layout1, [$series1]);$legend1 = new ChartLegend(ChartLegend::POSITION_RIGHT, null, false);$title1 = new Title('Test Bar Chart');$chart1 = new Chart('chart1', // name$title1, // title$legend1, // legend$plotArea1, // plotAreatrue, // plotVisibleOnlyDataSeries::EMPTY_AS_GAP, // displayBlanksAsnull, // xAxisLabelnull   // yAxisLabel - Pie charts don't have a Y-Axis);$majorGridlinesY = new GridLines();$majorGridlinesY->setLineColorProperties('FF0000');$minorGridlinesY = new GridLines();$minorGridlinesY->setLineStyleProperty('dash', Properties::LINE_STYLE_DASH_ROUND_DOT);$chart1->getChartAxisY()->setMajorGridlines($majorGridlinesY)->setMinorGridlines($minorGridlinesY);$majorGridlinesX = new GridLines();$majorGridlinesX->setLineColorProperties('FF00FF');$minorGridlinesX = new GridLines();$minorGridlinesX->activateObject();$chart1->getChartAxisX()->setMajorGridlines($majorGridlinesX)->setMinorGridlines($minorGridlinesX);$chart1->setTopLeftPosition('A7');$chart1->setBottomRightPosition('H20');$worksheet->addChart($chart1);$dataSeriesLabels2 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011];$xAxisTickValues2 = [new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4];$dataSeriesValues2 = [$dataSeriesValues2Element = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4),];$dataSeriesValues2Element->setFillColor($colors);$series2 = new DataSeries(DataSeries::TYPE_DONUTCHART, // plotTypenull, // plotGrouping (Donut charts don't have any grouping)range(0, count($dataSeriesValues2) - 1), // plotOrder$dataSeriesLabels2, // plotLabel$xAxisTickValues2, // plotCategory$dataSeriesValues2        // plotValues);$layout2 = new Layout();$layout2->setShowVal(true);$layout2->setShowCatName(true);$layout2->setLabelFillColor(new ChartColor('FFFF00'));$plotArea2 = new PlotArea($layout2, [$series2]);$title2 = new Title('Test Donut Chart');$chart2 = new Chart('chart2', // name$title2, // titlenull, // legend$plotArea2, // plotAreatrue, // plotVisibleOnlyDataSeries::EMPTY_AS_GAP, // displayBlanksAsnull, // xAxisLabelnull   // yAxisLabel - Like Pie charts, Donut charts don't have a Y-Axis);$chart2->setTopLeftPosition('I7');$chart2->setBottomRightPosition('P20');$worksheet->addChart($chart2);$filename = "test";header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8');header('Content-Disposition: attachment;filename="' . $filename . '.xlsx"');header('Cache-Control: max-age=0');ob_end_clean();$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');$writer->setIncludeCharts(true);$writer->save("php://output");$spreadsheet->disconnectWorksheets();

效果图

在这里插入图片描述

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...