将 Excel table 转换为二维数组
Convert Excel table to 2d array
我有下一个 Excel table,第一列是日期,其他列是一些数据(B、C)。
1.
2.
我想将其转换为 table,如图 3 所示:
为此,您需要在一个小时内将每一行和每一列的数据相加(不知道怎么说),然后乘以 2400。
例如,从第一张图片我们有 (0.0022 + 0.0078 + 0.0021 + 0.0078) * 2400 ≈ 47 — 第三张图片 table 的第一个元素。
我正在尝试使用 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;
}
但是我得到的不是工作代码,而是错误
第 22 行:
$data[$day][$hour] += $cell1 + $cell2;
我认为我的 2D 数组和我看到的数组键有问题(几个小时内不是 1-24)。
获取二维数组中的数据的代码应该是什么,例如 $data[1..29-31][1-24]
或其他任何代码?或者是否可以通过其他方式从图片 #3 中获取 table?
因为你的第 22 行是
$data[$day][$hour] += $cell1 + $cell2;
您正在尝试递增 $data[$day][$hour]
,它甚至还没有定义。您需要在尝试增加它之前定义它。我不确定,它会让 sheet 像您期望的那样工作。但这将解决您遇到的错误。 (在第 22 行之前添加)
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.
}
我有下一个 Excel table,第一列是日期,其他列是一些数据(B、C)。
1.
2.
我想将其转换为 table,如图 3 所示:
为此,您需要在一个小时内将每一行和每一列的数据相加(不知道怎么说),然后乘以 2400。 例如,从第一张图片我们有 (0.0022 + 0.0078 + 0.0021 + 0.0078) * 2400 ≈ 47 — 第三张图片 table 的第一个元素。
我正在尝试使用 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;
}
但是我得到的不是工作代码,而是错误
第 22 行:
$data[$day][$hour] += $cell1 + $cell2;
我认为我的 2D 数组和我看到的数组键有问题(几个小时内不是 1-24)。
获取二维数组中的数据的代码应该是什么,例如 $data[1..29-31][1-24]
或其他任何代码?或者是否可以通过其他方式从图片 #3 中获取 table?
因为你的第 22 行是
$data[$day][$hour] += $cell1 + $cell2;
您正在尝试递增 $data[$day][$hour]
,它甚至还没有定义。您需要在尝试增加它之前定义它。我不确定,它会让 sheet 像您期望的那样工作。但这将解决您遇到的错误。 (在第 22 行之前添加)
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.
}