PHP 如何使用 Excel 处理数据

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 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,搭建一个在线教育视频课程分享网站。
相关文章
|
29天前
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
57 0
|
2月前
|
安全 Java 数据库连接
jdbc解析excel文件,批量插入数据至库中
jdbc解析excel文件,批量插入数据至库中
21 0
|
2月前
|
Java API Apache
使用AOP+反射实现Excel数据的读取
使用AOP+反射实现Excel数据的读取
excel根据数据得出公式
excel根据数据得出公式
|
2月前
|
SQL 数据可视化 数据处理
使用SQL和Python处理Excel文件数据
使用SQL和Python处理Excel文件数据
55 0
|
4天前
|
Java Apache
java读取excel数据案例
Java代码示例使用Apache POI库读取Excel(example.xlsx)数据。创建FileInputStream和XSSFWorkbook对象,获取Sheet,遍历行和列,根据单元格类型(STRING, NUMERIC, BOOLEAN)打印值。需引入Apache POI库并确保替换文件路径。
7 1
|
23天前
|
开发工具
如何使用 Excel VBA 编程,点击按钮后跳转到有数据填充的最末一行
如何使用 Excel VBA 编程,点击按钮后跳转到有数据填充的最末一行
16 2
|
27天前
|
数据库连接 API 网络架构
在 Excel 里使用 ODBC 读取云平台上 CDS view 的数据
在 Excel 里使用 ODBC 读取云平台上 CDS view 的数据
15 0
在 Excel 里使用 ODBC 读取云平台上 CDS view 的数据
|
2月前
|
安全 Java 数据库连接
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
155 0