PHP 如何使用 Excel 处理数据

简介: 【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快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
相关文章
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
JSON 数据处理 PHP
PHP数组处理技巧:高效操作数据集合
PHP数组处理技巧:高效操作数据集合
|
JSON 安全 大数据
PHP中的数组处理艺术:灵活高效的数据操作
PHP中的数组处理艺术:灵活高效的数据操作
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
3069 10
|
JSON 定位技术 PHP
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
389 67
|
数据库连接 PHP 数据库
【YashanDB知识库】PHP使用ODBC驱动无法获取长度为256char以上的数据
【YashanDB知识库】PHP使用ODBC驱动无法获取长度为256char以上的数据
|
分布式计算 Hadoop 大数据
从Excel到Hadoop:数据规模的进化之路
从Excel到Hadoop:数据规模的进化之路
538 10