Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在phpspreadsheet库中动态导出图形_Php_Excel_Phpexcel_Phpspreadsheet - Fatal编程技术网

在phpspreadsheet库中动态导出图形

在phpspreadsheet库中动态导出图形,php,excel,phpexcel,phpspreadsheet,Php,Excel,Phpexcel,Phpspreadsheet,我有一个带有许多复选框(+-40)的页面,每个复选框代表一个用户可以导出到Excel的图形(我使用PHPSReadSheet库进行此操作) 有些图将是带有一条线的线图,其他图将有多条线,将有饼图、列表。。。各种图形和数据 需要注意的是,我的导出工作表将包含不同的工作表,每个类别一个工作表,其中只包含图形。和1个“数据”选项卡,其中将包含在单个选项卡中导出的每个图形的原始数据(不考虑类别) 我一直在为每个导出的图形动态定义标签和数据。因为我不需要太多的空白(例如,当我硬编码每个图形在Excel工作

我有一个带有许多复选框(+-40)的页面,每个复选框代表一个用户可以导出到Excel的图形(我使用PHPSReadSheet库进行此操作)

有些图将是带有一条线的线图,其他图将有多条线,将有饼图、列表。。。各种图形和数据

需要注意的是,我的导出工作表将包含不同的工作表,每个类别一个工作表,其中只包含图形。和1个“数据”选项卡,其中将包含在单个选项卡中导出的每个图形的原始数据(不考虑类别)

我一直在为每个导出的图形动态定义标签和数据。因为我不需要太多的空白(例如,当我硬编码每个图形在Excel工作表中的位置,并且用户决定只导出最后一个图形时,我希望它显示在最左边,而不是完全显示在最后,之前有很多空白)

我决定使用固定的列跨度预先定义范围,这样我就可以容纳这些图中最小但也是最大的数据集,因为有些数据集将有2列,而其他数据集将有4或5列。(这并不理想,但我不确定如何使范围也具有动态性)

我将用代码示例解释:

我定义了两个变量,它们表示所有变量的范围

    //Graphs are placed on category sheets, so we don't need more than 8 graphs per sheet
        $graphColumns = [
             'A2:H15', 'J2:Q15', 'A17:H30',
             'J17:Q30', 'S2:Z15', 'AB2:AI15',
             'S17:Z30', 'AB17:AI30'
        ];
        //All raw data for each graph (+- 40 now) will be exported to the raw data sheet
        $dataColumns = [
             'A3', 'G3', 'M3', 'S3', 'Y3', 'AE3', 'AK3', 'AQ3',
             'AW3', 'BC3', 'BI3', 'BO3', 'BU3', 'CA3', 'CG3', 'CM3',
             'CS3', 'CY3', 'DE3', 'DK3', 'DQ3', 'DW3', 'EC3', 'EI3',
             'EO3', 'EU3', 'FA3', 'FG3', 'FM3', 'FS3', 'FY3', 'GE3'
        ];
此时,我创建了所有的工作表(每个类别一个,原始数据一个)

然后,我为每个要导出的图形调用一个函数,如下所示:

drawAmountNewVacancies($vacanciesSheet, $rawDataSheet, $result, array_shift($graphColumns), array_shift($dataColumns));
$rawDataArray = [];
    $rawDataArray[0][0] = '';
    $rawDataArray[0][1] = 'Totaal';
    $i = 1;
    foreach ($queryResult as $res) {
        $rawDataArray[$i][0] = $res->date;
        $rawDataArray[$i][1] = (int)$res->total_amount;
        $i++;
    }

    $datasheet->fromArray(
        $rawDataArray,
        '',
        $dataColumn
    );
$vacancessheet
包含对需要插入图形的工作表的引用,
$rawDataSheet
包含对我要插入原始数据的工作表的引用,
$result
是我的数据库查询的结果(包含我要插入的原始数据),然后取
graphColumns
dataColumns
数组的第一个元素,确保它不能再被另一个函数调用使用,因为array\u shift会删除它们

对于这个特定的图表,我知道我将有两列,一列包含日期,另一列包含总金额

因此,我创建了一个多维数组,并将其插入位置
array\u shift($dataColumns)
(本例中为A3),如下所示:

drawAmountNewVacancies($vacanciesSheet, $rawDataSheet, $result, array_shift($graphColumns), array_shift($dataColumns));
$rawDataArray = [];
    $rawDataArray[0][0] = '';
    $rawDataArray[0][1] = 'Totaal';
    $i = 1;
    foreach ($queryResult as $res) {
        $rawDataArray[$i][0] = $res->date;
        $rawDataArray[$i][1] = (int)$res->total_amount;
        $i++;
    }

    $datasheet->fromArray(
        $rawDataArray,
        '',
        $dataColumn
    );
这会插入我想要的数据,在这一点上,为了生成一个折线图,我需要定义
dataSeriesLabels
xAxisTickValues
dataSeriesValues

这就是我被困的地方。

为了创建图形,我需要定义两个变量,如下所示:

$dataSeriesLabels = [
        new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Ruwe data!$B$3', null, 1)
    ];
    $xAxisTickValues = [
        new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Vacatures!$A$3:$A$55', null, 4)
    ];
    $dataSeriesValues = [
        new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Vacatures!$B$3:$B$55', null, 4)
    ];
我如何告诉图书馆在哪里查找数据?由于我只预先确定了一个起点(A3)(并用数组中的
插入),因此我没有B列的上下文(可能还有C、D等)