PHP 如何使用 Excel 处理数据

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: 【1月更文挑战第1天】PHP 如何使用 Excel 处理数据

场景

业务功能单据在已有添加、编辑功能的基础上,业务想增加使用 Excel 导入,同时将导入的结果使用原表的格式再返回给用户。

准备

  • laravel
  • OSS
  • RDS MySQL

方案

  1. 用户通过 Web 页面上传 Excel 数据源。
  2. Web Server 收到请求后,将 Excel 上传至 OSS,并同时发 MQ 消息通知异步服务器。
  3. 异步服务器收到消息后从 OSS 下载 Excel,并根据业务逻辑处理数据。
  4. 异步服务器将数据存储至数据库。
  5. 异步服务器将处理结果写至 Excel,并将该结果上传至 OSS 后将文件下载链接发送给用户。

步骤

以下为 Excel 处理的主要步骤代码:

  1. 安装 Excel 插件
composer require phpoffice/phpexcel
  1. 下载 OSS 文件
//下载文件到本地
$$fileDownloadUrl = "文件下载链接,可以通过 MQ 消息获得";
$destinationFolder = 'storage/downloads/';
//这里的文件后缀可根据下载链接来进行处理
$newFname = $destinationFolder .time().'.xlsx';
$file = fopen ($fileDownloadUrl, "rb");
if ($file) {
    $newf = fopen($newFname, "wb");
    if ($newf){
        while(!feof($file)) {
            fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
        }
    }
}
if ($file) {
    fclose($file);
}
if ($newf) {
    fclose($newf);
}
  1. 读取 Excel 内容
//从excel读取数据
$filePath = "上一步骤中下载的本地文件的地址";
$PHPExcel = new \PHPExcel_Reader_Excel2007();
try {
    if (!$PHPExcel->canRead($filePath)) {
        //默认用excel2007读取excel,若格式不对,则用之前的版本进行读取
        $PHPExcel = new \PHPExcel_Reader_Excel5();
    }
    $PHPExcel->setReadDataOnly(true);  //过滤excel中的特殊字符
    $excel = $PHPExcel->load($filePath);//加载excel
    //读取excel文件中的第一个工作表
    $data = $excel->getSheet(0)->toArray();
} catch (\Exception $e) {
    echo 'excel read error'.$e->getMessage();
}
  1. 导出 Excel
ini_set('memory_limit', '-1'); 
//文件保存的路径
$filePath = "storage/downloads/".time().".xlsx";
$objPHPExcel = new \PHPExcel();
$titles = ["姓名","性别","生日","学历"];
$dataList = [
    ["张三","男","1995-01-01","本科"],
    ["张四","男","1995-01-02","本科"],
    ["张五","男","1995-01-03","本科"],
    ["张六","男","1995-01-04","本科"],
    ["张七","男","1995-01-05","本科"],
    ["张八","男","1995-01-06","本科"],
];
// 设置列宽
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
//设置第一行为标题
foreach ($titles as $curColumn => $curValue) {
    $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValueByColumnAndRow($curColumn, 1,$curValue);
}
//设置数据内容
foreach ($dataList as $curRow => $curValueList) {
    $curRow = $curRow+2;
    foreach ($curValueList as $curColumn => $curValue) {
        $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValueByColumnAndRow($curColumn, $curRow,$curValue);
    }
}
$objPHPExcel->getActiveSheet()->setTitle('人员'); // sheet 名
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save($filePath);
exit;
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
5月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
725 10
|
2月前
|
数据库连接 PHP 数据库
【YashanDB知识库】PHP使用ODBC驱动无法获取长度为256char以上的数据
【YashanDB知识库】PHP使用ODBC驱动无法获取长度为256char以上的数据
|
2月前
|
Oracle 关系型数据库 MySQL
【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
本文分析了YashanDB中PHP通过ODBC查询数据时出现的数据截断问题,表现为超过256字节的数据被截断,以及isql工具无法显示超过300字节长度的数据。问题根源在于YashanDB的ODBC驱动仅支持单次查询,且PHP扩展库默认缓冲区限制。解决方案包括改用PHP ODBC扩展库而非PDO_ODBC,以及调整isql代码逻辑以支持循环取数或一次性读取完整数据。文章还提供了具体代码示例和规避方法,适用于23.2.4.14及更早版本。
【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
|
3月前
|
分布式计算 Hadoop 大数据
从Excel到Hadoop:数据规模的进化之路
从Excel到Hadoop:数据规模的进化之路
68 10
|
3月前
|
Oracle 关系型数据库 MySQL
【YashanDB 知识库】php 查询超过 256 长度字符串,数据被截断的问题
php 查询超过 256 字节数据,显示被截断:yashandb 的 odbc 驱动接口 SQLGetData 现在只支持单次查询,不支持多次取数据的操作。 isql 显示不出来,isql 工具最大只查询 300 长度的数据,超过了该长度未正常显示。
|
5月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
6月前
|
数据采集 JSON JavaScript
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
本文介绍了如何使用PHP模拟表单提交并结合代理IP技术抓取京东商品的实时名称和价格,特别是在电商大促期间的数据采集需求。通过cURL发送POST请求,设置User-Agent和Cookie,使用代理IP绕过限制,解析返回数据,展示了完整代码示例。
139 3
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
|
6月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
117 5
|
6月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
137 3
|
6月前
|
存储 SQL 数据处理
PHP中如何高效地处理大规模数据的排序?
在PHP中处理大规模数据排序时,选择合适的方法至关重要。对于内存内可以处理的数据,可以直接使用PHP内置排序函数;对于超出内存限制的数据,可以考虑分块处理、外部排序或利用数据库的排序功能。根据具体应用场景和数据规模,选择最佳的排序策略,确保排序操作高效且稳定。
66 2