Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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
Php 将Excel表格转换为二维数组_Php_Arrays_Excel_Multidimensional Array_Phpexcel - Fatal编程技术网

Php 将Excel表格转换为二维数组

Php 将Excel表格转换为二维数组,php,arrays,excel,multidimensional-array,phpexcel,Php,Arrays,Excel,Multidimensional Array,Phpexcel,我有下一个Excel表格,第一列是日期,另一列是一些数据(B,C) 一, 二, 我想把它转换成如图3所示的表格: 要做到这一点,您需要在一小时内(不知道如何正确表达)将每行和每列的数据相加,然后乘以2400。 例如,从第一张图片中,我们得到了(0.0022+0.0078+0.0021+0.0078)*2400≈ 47-第三张图片中表格的第一个元素 我正在尝试使用PHPExcel库执行此操作: $objPHPExcel = new PHPExcel(); $objPHPExcel = PHP

我有下一个Excel表格,第一列是日期,另一列是一些数据(B,C)

一,

二,

我想把它转换成如图3所示的表格:

要做到这一点,您需要在一小时内(不知道如何正确表达)将每行和每列的数据相加,然后乘以2400。 例如,从第一张图片中,我们得到了(0.0022+0.0078+0.0021+0.0078)*2400≈ 47-第三张图片中表格的第一个元素

我正在尝试使用PHPExcel库执行此操作:

$objPHPExcel = new PHPExcel();
$objPHPExcel = PHPExcel_IOFactory::load("data.xlsx");
$highestRow  = $objPHPExcel->getActiveSheet()->getHighestRow();
$day = 1;
$hour = 1;
$data = array(array());
for ($i = 1; $i < $highestRow + 1; $i++) {
    $cell1 = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, $i)->getValue();
    $cell2 = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(2, $i)->getValue();
    $data[$day][$hour] += $cell1 + $cell2;
    if($i % 2 == 0)  { $data[$day][$hour] *= 2400; $hour++; }
    if($i % 48 == 0) $day++;
    if($hour % 24 == 0) $hour = 1;
}
我认为我的2D数组和我可以看到的数组键有问题(不是1-24小时)


在2D数组中获取数据(如
$data[1..29-31][1-24]
或任何其他数组)的代码应该是什么?或者可以通过其他方式从图片#3中获取表格吗?

因为您的行号是22

$data[$day][$hour] += $cell1 + $cell2;
您正在尝试增加尚未定义的
$data[$day][$hour]
。您需要在尝试增加它之前定义它。我不确定,它会使工作表像你期望的那样工作。但这将修复您得到的错误。(将其添加到第22行之前)


相关:事实上A1:A1487是左对齐的,A1488是右对齐的,这让我很担心。单元格中的左对齐通常表示文本;在本例中,日期时间的文本表示形式。如果这些是真实的日期时间,那么默认情况下它们都是右对齐的。哪一行是第22行?@Jeeped,这并不重要。我可以像$highestRow/48一样计算天数。@TaReQMahMooD我不明白这个问题。正如您看到的错误消息,它来自第22行。所以我只想知道上面代码中的哪一行是第22行。看来问题解决了。由于未声明数组,通知确实出现了,而且我在小时检测方面犯了一个小错误。而不是如果($hour%24==0)$hour=1;应该是:如果($hour%25==0)$hour=1;谢谢@TaReQ MahMooD。
$data[$day][$hour] += $cell1 + $cell2;
if(!isset($data[$day])) {
    $data[$day] = array(); //Setting the day which will get the hours in array
}
if(!isset($data[$day][$hour])) {
    $data[$day][$hour] = 0; //Setting the hours which will contain the incremented values for each hour. Setting it 0, the next code blocks will increment it. 
}