php解析excel表格转格式化的json数据

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

最终展示:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值