php解析excel表格转格式化的json数据
字段为:户号窗号季节有效时长具体时段
这个难点为:汇总统计户号中前一位或两位为楼层:
php代码(注意,excel表中的有效时长为 文本类型)
<?php
// 检查是否有文件上传
if ($_FILES['excelFile']['error'] === UPLOAD_ERR_OK) {
// 获取上传的临时文件名
$tmp_name = $_FILES['excelFile']['tmp_name'];
// 加载PHPExcel库(假设你使用PHPExcel来处理Excel文件)
// require_once 'PHPExcel/Classes/PHPExcel.php';
require 'vendor/autoload.php';
// 读取Excel文件
$objPHPExcel = PHPExcel_IOFactory::load($tmp_name);
// 获取第一个工作表(假设只有一个工作表)
$sheet = $objPHPExcel->getSheet(0);
// 获取行数和列数
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
// 初始化数据数组
$data = array();
// 遍历每行数据
for ($row = 2; $row <= $highestRow; $row++) {
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, null, true, false);
// 解析每行数据
$household = trim($rowData[0][0]);
$window = (int)$rowData[0][1];
$season = trim($rowData[0][2]);
$duration = trim($rowData[0][3]);
$timePeriods = trim($rowData[0][4]);
// 构造数据结构
$entry = array(
'户号' => $household,
'平均有效时长' => $duration,
'窗号列表' => array(
array(
'窗号' => $window,
'季节' => $season,
'有效时长' => $duration,
'具体时段' => $timePeriods
)
)
);
// 根据户号计算楼层
$floor = floor((int)$household / 100);
// 将数据添加到对应的楼层列表中
if (!isset($data[$floor])) {
$data[$floor] = array(
'楼层' => $floor,
'户号列表' => array()
);
}
// 查找并添加户号数据
$householdFound = false;
foreach ($data[$floor]['户号列表'] as &$item) {
if ($item['户号'] === $household) {
$item['窗号列表'][] = $entry['窗号列表'][0];
$householdFound = true;
break;
}
}
if (!$householdFound) {
$data[$floor]['户号列表'][] = array(
'户号' => $household,
'平均有效时长' => $duration,
'窗号列表' => array($entry['窗号列表'][0])
);
}
}
// 返回JSON数据
header('Content-Type: application/json');
echo json_encode(array_values($data), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
} else {
// 处理文件上传错误
echo '文件上传出错';
}
?>
composer.json
{
"name": "your/project-name",
"description": "Description of your project",
"require": {
"phpoffice/phpexcel": "^1.8"
},
"autoload": {
"psr-4": {
"YourNamespace\\": "src/"
}
}
}
安装使用:
composer install
最终展示: