·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

PHPExcel使用1-读取excel并显示出来-比较老的方法

505 1
发表于 2023-4-21 18:22:47 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
使用第三方扩展PHPExcel读取excel并显示出数据,

代码如下:(Thinkphp5示例)
  1. //导入excel中的积分
  2. public function import_excel()
  3. {
  4.     Loader::import('PHPExcel.Classes.PHPExcel');      //手动引入PHPExcel.php
  5.     Loader::import('PHPExcel.Classes.PHPExcel.IOFactory');    //引入IOFactory.php 文件里面的PHPExcel_IOFactory这个类
  6.     $inputFileName = 'e:/23333.xls';
  7.     date_default_timezone_set('PRC');
  8.     // 读取excel文件
  9.     try {
  10.         $inputFileType = \PHPExcel_IOFactory::identify($inputFileName);
  11.         $objReader = \PHPExcel_IOFactory::createReader($inputFileType);
  12.         $objPHPExcel = $objReader->load($inputFileName);
  13.     } catch(Exception $e) {
  14.         exit('加载文件发生错误:['.pathinfo($inputFileName,PATHINFO_BASENAME).']'.$e->getMessage());
  15.     }
  16.     // 确定要读取的sheet
  17.     $sheet = $objPHPExcel->getSheet(0);
  18.     $highestRow = $sheet->getHighestRow();
  19.     $highestColumn = $sheet->getHighestColumn();
  20.     // 获取一行的数据
  21.     for ($row = 1; $row <= $highestRow; $row++){
  22.         // Read a row of data into an array
  23.         $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
  24.         //这里得到的rowData都是一行的数据,得到数据后自行处理,我们这里只打出来看看效果
  25.         print_r($rowData);
  26.         echo '
  27. ';
  28.     }
  29. }
复制代码

最后结果:
PHPExcel使用1-读取excel并显示出来-比较老的方法 使用,读取,excel,显示,出来
  1. 注:PHPExcel官方已经不再维护,新项目推荐使用PhpSpreadsheet来操作excel。
复制代码

在CSDN上也发现一个使用PHPExcel:原始链接:https://blog.csdn.net/ning521513/article/details/55257925 ,原版有错误,我给修正了一下:
  1. public function abc()
  2.     {
  3.         $uploadfile = 'E:/000111.xls';
  4.         if (!file_exists($uploadfile)) {
  5.             $this->notfound();
  6.         }
  7.         $ext        = substr(strstr($uploadfile, '.'), 1);
  8.         require './extend/PHPExcel/Classes/PHPExcel.php';
  9.         //require './extend/PHPExcel/Classes/PHPExcel/IOFactory.php';
  10.         if($ext=='xlsx'||$ext=='xls' ){
  11.             $reader = \PHPExcel_IOFactory::createReader('Excel5'); // 读取 excel 文档
  12.         }else if( $ext=='csv' ){
  13.             $reader = \PHPExcel_IOFactory::createReader('CSV'); // 读取 excel 文档
  14.         }else{
  15.             die('Not supported file types!');
  16.         }
  17.         $PHPExcel = $reader->load($uploadfile); // 文档名称
  18.         $objWorksheet = $PHPExcel->getActiveSheet();
  19.         $highestRow = $objWorksheet->getHighestRow(); // 取得总行数
  20.         $highestColumn = $objWorksheet->getHighestColumn(); // 取得总列数
  21.         //echo $highestRow.$highestColumn;
  22.         // 一次读取一列
  23.         $res = array();
  24.         for ($row = 1; $row <= $highestRow; $row++) {
  25.             for ($column = 'A'; $column <= $highestColumn; $column++) {
  26.                 $ccc = ord($column) - 65;
  27.                 $val = $objWorksheet->getCellByColumnAndRow($ccc, $row)->getValue();
  28.                 $res[$row-1][$column] = $val;
  29.             }
  30.         }
  31.         dd($res);
  32.     }
复制代码
算是一个发散思维读取excel内容的方法吧。还有现在TP5都支持命名空间了,居然还在用require。
建议以后都使用命名空间引入,少用require。
我要说一句 收起回复

评论1

Discuz智能体Lv.8 发表于 2025-3-20 08:17:49 | 查看全部
感谢你提供的代码示例和问题描述。你提到的代码是使用PHPExcel库来读取Excel文件的示例。虽然PHPExcel已经不再维护,但对于一些老项目来说,仍然可能会遇到使用PHPExcel的情况。下面我将对你的代码进行一些优化和解释,并给出一些建议。

### 代码优化与解释

1. **命名空间引入**:
   你提到TP5支持命名空间,建议使用命名空间引入类,而不是使用`require`。这样可以更好地管理依赖,并且代码更加清晰。

  
  1. use PHPExcel;
  2.    use PHPExcel_IOFactory;
复制代码


2. **异常处理**:
   在读取Excel文件时,建议使用`try-catch`块来捕获可能的异常,并在异常发生时给出友好的提示。

3. **文件类型判断**:
   你提到根据文件扩展名来判断文件类型,这在实际应用中是非常常见的做法。不过,建议使用`PHPExcel_IOFactory::identify`来自动识别文件类型,这样可以避免手动判断文件类型的复杂性。

4. **读取数据**:
   在读取数据时,建议使用`rangeToArray`方法来获取整个工作表的数据,这样可以减少循环次数,提高代码的可读性和性能。

### 优化后的代码示例

  1. use PHPExcel;
  2. use PHPExcel_IOFactory;

  3. public function import_excel()
  4. {
  5.     $inputFileName = 'e:/23333.xls';
  6.     date_default_timezone_set('PRC');

  7.     // 读取excel文件
  8.     try {
  9.         $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
  10.         $objReader = PHPExcel_IOFactory::createReader($inputFileType);
  11.         $objPHPExcel = $objReader->load($inputFileName);
  12.     } catch(Exception $e) {
  13.         exit('加载文件发生错误:'.$e->getMessage());
  14.     }

  15.     // 确定要读取的sheet
  16.     $sheet = $objPHPExcel->getSheet(0);
  17.     $highestRow = $sheet->getHighestRow();
  18.     $highestColumn = $sheet->getHighestColumn();

  19.     // 获取整个工作表的数据
  20.     $data = $sheet->rangeToArray('A1:' . $highestColumn . $highestRow, NULL, TRUE, FALSE);

  21.     // 输出数据
  22.     foreach ($data as $rowData) {
  23.         print_r($rowData);
  24.         echo '<br>';
  25.     }
  26. }
复制代码


### 使用PhpSpreadsheet的替代方案

由于PHPExcel已经不再维护,推荐使用`PhpSpreadsheet`来替代。`PhpSpreadsheet`是PHPExcel的继任者,提供了更好的性能和更多的功能。

#### 安装PhpSpreadsheet

你可以通过Composer来安装PhpSpreadsheet:

  1. composer require phpoffice/phpspreadsheet
复制代码


#### 使用PhpSpreadsheet读取Excel文件

  1. use PhpOffice\PhpSpreadsheet\IOFactory;

  2. public function import_excel()
  3. {
  4.     $inputFileName = 'e:/23333.xls';
  5.     date_default_timezone_set('PRC');

  6.     // 读取excel文件
  7.     try {
  8.         $spreadsheet = IOFactory::load($inputFileName);
  9.     } catch(Exception $e) {
  10.         exit('加载文件发生错误:'.$e->getMessage());
  11.     }

  12.     // 确定要读取的sheet
  13.     $sheet = $spreadsheet->getActiveSheet();
  14.     $highestRow = $sheet->getHighestRow();
  15.     $highestColumn = $sheet->getHighestColumn();

  16.     // 获取整个工作表的数据
  17.     $data = $sheet->rangeToArray('A1:' . $highestColumn . $highestRow, NULL, TRUE, FALSE);

  18.     // 输出数据
  19.     foreach ($data as $rowData) {
  20.         print_r($rowData);
  21.         echo '<br>';
  22.     }
  23. }
复制代码


### 总结

- **PHPExcel**:虽然已经不再维护,但在老项目中仍然可以使用。建议使用命名空间引入类,并优化异常处理和文件读取逻辑。
- **PhpSpreadsheet**:推荐在新项目中使用,提供了更好的性能和更多的功能。可以通过Composer轻松安装和使用。

希望这些建议对你有帮助!如果你有其他问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.118.105.93,GMT+8, 2025-4-14 08:59 , Processed in 0.323452 second(s), 71 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表