phpspreadsheet - 图表中没有标记的线
phpspreadsheet - lines without markers in chart
我正在使用 phpspreadsheet 生成折线图。几乎一切都很好,但我不知道如何改变情节风格。
这是我的:
function createChart($sheet, $sheetname, $data) {
$count = $data["custom"]["count"];
$sheet->getColumnDimensionByColumn(1)->setAutoSize(true);
$sheet->setCellValueByColumnAndRow(1, 1, $data["custom"]["type"]);
for($j=0; $j < $count; $j++)
$sheet->setCellValueByColumnAndRow(1, $j + 2, $data["custom"]["dates"][$j]);
for($i=0; $i< count($data["series"]); $i++) {
$sheet->setCellValueByColumnAndRow($i+2, 1, $data["series"][$i]["name"]);
$sheet->getColumnDimensionByColumn($i+2)->setAutoSize(true);
for($j=0; $j < $count; $j++)
{
$value = $data["series"][$i]["data"][$j] ? $data["series"][$i]["data"][$j] : 0;
$sheet->setCellValueByColumnAndRow($i+2, $j + 2, $value);
}
}
$dsl=array();
for($i=0; $i< count($data["series"]); $i++) {
$series = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, $sheetname . '!' .
$sheet->getCellByColumnAndRow($i+2, 1)->getCoordinate(), NULL, 1, [], NULL, NULL);
array_push($dsl, $series);
}
$xal=array(
new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $sheetname . '!'.
$sheet->getCellByColumnAndRow(1, 2)->getCoordinate() . ':' .
$sheet->getCellByColumnAndRow(1, $count + 2)->getCoordinate() , NULL, $count)
);
$dsv = array();
for($i=0; $i< count($data["series"]); $i++) {
$series = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $sheetname . '!'.
$sheet->getCellByColumnAndRow($i+2, 2)->getCoordinate() . ':' .
$sheet->getCellByColumnAndRow($i+2, $count + 2)->getCoordinate() , NULL, $count);
array_push($dsv, $series);
}
$type = "";
switch($data["series"][0]["type"]) {
case CHART_TYPE_BARCHART:
$type = DataSeries::TYPE_BARCHART;
break;
case CHART_TYPE_LINECHART:
$type = DataSeries::TYPE_LINECHART;
break;
default:
$type = DataSeries::TYPE_LINECHART;
}
$ds = new DataSeries(
$type,
DataSeries::GROUPING_STANDARD,
range(0, count($dsv)-1),
$dsl,
$xal,
$dsv,
null,
true,
DataSeries::STYLE_MARKER
);
$pa = new PlotArea(NULL, array($ds));
$legend = new Legend(Legend::POSITION_BOTTOM, NULL, false);
$title = new Title($data["title"]["text"]);
$chart = new Chart(
'chart1',
$title,
$legend,
$pa,
0,
0,
NULL,
NULL
);
$chart->setTopLeftPosition( $sheet->getCellByColumnAndRow(count($data["series"]) + 3, 1)->getCoordinate());
$chart->setBottomRightPosition($sheet->getCellByColumnAndRow(count($data["series"]) + 17, 40)->getCoordinate());
$sheet->addChart($chart);
}
具体来说,我想画没有标记的线。
我尝试将所有可能的值传递给 Dataseries
构造函数的 $plotStyle
参数,但这没有任何效果。
我从 API docs 知道有一个 Properties
class 定义了许多影响图表样式的常量,但我不知道如何使用它,因为它似乎没有被其他 classes 引用。
我也从this question了解到可以设置正在创建的文档的样式属性,这种方法正确吗?如何导航到图表的属性?
我自己找的。我需要做的就是将字符串 "none"
传递给 DataSeriesValues
构造函数的参数 $marker
:
DataSeriesValues::__construct(
string $dataType = self::DATASERIES_TYPE_NUMBER,
string $dataSource = null
, null|mixed $formatCode = null,
int $pointCount = 0,
mixed $dataValues = [],
null|mixed $marker = null,
null|string $fillColor = null
)
因此我的代码的相关部分变为:
for($i=0; $i< count($data["series"]); $i++) {
$series = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $sheetname . '!'.
$sheet->getCellByColumnAndRow($i+2, 2)->getCoordinate() . ':' .
$sheet->getCellByColumnAndRow($i+2, $count + 2)->getCoordinate() , NULL, $count, [], "none");
array_push($dsv, $series);
}
我正在使用 phpspreadsheet 生成折线图。几乎一切都很好,但我不知道如何改变情节风格。
这是我的:
function createChart($sheet, $sheetname, $data) {
$count = $data["custom"]["count"];
$sheet->getColumnDimensionByColumn(1)->setAutoSize(true);
$sheet->setCellValueByColumnAndRow(1, 1, $data["custom"]["type"]);
for($j=0; $j < $count; $j++)
$sheet->setCellValueByColumnAndRow(1, $j + 2, $data["custom"]["dates"][$j]);
for($i=0; $i< count($data["series"]); $i++) {
$sheet->setCellValueByColumnAndRow($i+2, 1, $data["series"][$i]["name"]);
$sheet->getColumnDimensionByColumn($i+2)->setAutoSize(true);
for($j=0; $j < $count; $j++)
{
$value = $data["series"][$i]["data"][$j] ? $data["series"][$i]["data"][$j] : 0;
$sheet->setCellValueByColumnAndRow($i+2, $j + 2, $value);
}
}
$dsl=array();
for($i=0; $i< count($data["series"]); $i++) {
$series = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, $sheetname . '!' .
$sheet->getCellByColumnAndRow($i+2, 1)->getCoordinate(), NULL, 1, [], NULL, NULL);
array_push($dsl, $series);
}
$xal=array(
new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $sheetname . '!'.
$sheet->getCellByColumnAndRow(1, 2)->getCoordinate() . ':' .
$sheet->getCellByColumnAndRow(1, $count + 2)->getCoordinate() , NULL, $count)
);
$dsv = array();
for($i=0; $i< count($data["series"]); $i++) {
$series = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $sheetname . '!'.
$sheet->getCellByColumnAndRow($i+2, 2)->getCoordinate() . ':' .
$sheet->getCellByColumnAndRow($i+2, $count + 2)->getCoordinate() , NULL, $count);
array_push($dsv, $series);
}
$type = "";
switch($data["series"][0]["type"]) {
case CHART_TYPE_BARCHART:
$type = DataSeries::TYPE_BARCHART;
break;
case CHART_TYPE_LINECHART:
$type = DataSeries::TYPE_LINECHART;
break;
default:
$type = DataSeries::TYPE_LINECHART;
}
$ds = new DataSeries(
$type,
DataSeries::GROUPING_STANDARD,
range(0, count($dsv)-1),
$dsl,
$xal,
$dsv,
null,
true,
DataSeries::STYLE_MARKER
);
$pa = new PlotArea(NULL, array($ds));
$legend = new Legend(Legend::POSITION_BOTTOM, NULL, false);
$title = new Title($data["title"]["text"]);
$chart = new Chart(
'chart1',
$title,
$legend,
$pa,
0,
0,
NULL,
NULL
);
$chart->setTopLeftPosition( $sheet->getCellByColumnAndRow(count($data["series"]) + 3, 1)->getCoordinate());
$chart->setBottomRightPosition($sheet->getCellByColumnAndRow(count($data["series"]) + 17, 40)->getCoordinate());
$sheet->addChart($chart);
}
具体来说,我想画没有标记的线。
我尝试将所有可能的值传递给 Dataseries
构造函数的 $plotStyle
参数,但这没有任何效果。
我从 API docs 知道有一个 Properties
class 定义了许多影响图表样式的常量,但我不知道如何使用它,因为它似乎没有被其他 classes 引用。
我也从this question了解到可以设置正在创建的文档的样式属性,这种方法正确吗?如何导航到图表的属性?
我自己找的。我需要做的就是将字符串 "none"
传递给 DataSeriesValues
构造函数的参数 $marker
:
DataSeriesValues::__construct(
string $dataType = self::DATASERIES_TYPE_NUMBER,
string $dataSource = null
, null|mixed $formatCode = null,
int $pointCount = 0,
mixed $dataValues = [],
null|mixed $marker = null,
null|string $fillColor = null
)
因此我的代码的相关部分变为:
for($i=0; $i< count($data["series"]); $i++) {
$series = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $sheetname . '!'.
$sheet->getCellByColumnAndRow($i+2, 2)->getCoordinate() . ':' .
$sheet->getCellByColumnAndRow($i+2, $count + 2)->getCoordinate() , NULL, $count, [], "none");
array_push($dsv, $series);
}