资讯专栏INFORMATION COLUMN

PHPExcel读取表格内容

Nosee / 1980人阅读

摘要:读取表格先引入类测试文件加载测试文件判断文件类型实例化类型对象加载文件下面主要判断和类型即和格式文件请确保导入的文件格式正确加载文件发生错误获取当前工作表或者获取工作表行数和列数注意有时候你会发现你的表格明明有内容的行数就

PHPExcel读取表格

先引入类IOFactory.php

require_once "../PHPExcel/IOFactory.php";
$filePath = "test.xlsx";  // 测试文件

加载测试文件

$inputFileType = PHPExcel_IOFactory::identify($filePath) 判断文件类型

$objReader = PHPExcel_IOFactory::createReader($inputFileType); 实例化类型对象

$objPHPExcel = $objReader->load($filePath); 加载文件

下面主要判断Excel2007和Excel5类型,即xlsx/xlsm/xltx/xltm和xls/xlt格式文件

try {
    $inputFileType = PHPExcel_IOFactory::identify($filePath);
    if ($inputFileType !== "Excel5" && $inputFileType !== "Excel2007" ) {
        unlink($filePath) && str_alert(-1,"请确保导入的文件格式正确!");
    }
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($filePath);
} catch(Exception $e) {
    unlink($filePath) && str_alert(-1,"加载文件发生错误:”".pathinfo($filePath,PATHINFO_BASENAME)."”: ".$e->getMessage());
    }

获取当前工作表
$sheet = $objPHPExcel->getSheet(0);
//或者
$sheet = $objPHPExcel->getActiveSheet();
获取工作表行数和列数
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();

注意:有时候你会发现你的表格明明有内容的行数就5行,但是获取到的$highestRow却有7,8行或者更多,这可能是因为你在操作你的表格的时候不小心点击了其它行数,虽然没有填写内容,但getHighestRow也是能够识别出行数;
想要获取有内容的行数应该使用getHighestDataRow和getHighestDataColumn
源码注释是这样介绍的string Highest row number that contains data,即包含数据的字符串最高行数.

单元格具体内容

xlsx类型的表格单元格是通过类似xy轴坐标来获取的,

可通过类似

 $sheet->getCell("A1")->getValue();
 $sheet->getCell("B2")->getValue();

获取相应位置的内容,
如果不想通过字母了来遍历获取,可以用数字索引方法

  $sheet->getCellByColumnAndRow(0,1);
  $sheet->getCellByColumnAndRow(1,2);

注意坐标中第一个参数从0开始,0代表A,1代表B...,第二个参数从1开始.
下面是遍历表格获取全部单元格内容:

$dataSet=array();
for ($column = "A"; $column <= $highestColumn; $column++) {//列数是以A列开始
    for ($row = 4; $row <= $highestRow; $row++) { //行数是以第4行开始
        $cell = $sheet->getCell($column . $row)->getValue();
        if($cell instanceof PHPExcel_RichText) { //富文本转换字符串
            $cell = $cell->__toString();
        }
        $dataSet[$row][] = $cell;
    }
}

其中富文本转换字符串,是使用$cell instanceof PHPExcel_RichText判断是否为富文本,查阅资料发现如果你的单元格中字符串包含两种以上的字体会自动被设为富文本,这时候需要__toString()转换

判断合并单元格是否位于最左上角

当我们循环输出所有单元格后发现,一些被合并的单元格只有最左上坐标的是有内容的,其他都是null
例如A4,A5合并成一个单元格,getCell("A4")是有正常内容的,但是getCell("A5")是null.
isMergeRangeValueCell可以用来判断某个具体的单元格是否为最左上角

$sheet->getCell("A" . $row)->isMergeRangeValueCell()

当$row为4的时候是返回true,5的时候返回false

转换时间

获取表格中时间格式的内容,需要PHPExcel_Shared_Date::ExcelToPHP()来转换为php可识别的时间格式

date("Y-m-d",PHPExcel_Shared_Date::ExcelToPHP($sometime);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29084.html

相关文章

  • 打造最全面的PHPExcel开发解决方案

    摘要:过去工作中使用较多,碰到并解决了各种大大小小的问题,总结出这样一篇文章,一方面记录自己踩过的坑,一方面与大家分享,让大家少走弯路,并不断完善之,欢迎大家去上面和提交,不断补充和优化,打造最全面的开发解决方案地址原文地址基础小试牛刀引用文 过去工作中使用PHPExcel较多,碰到并解决了各种大大小小的问题,总结出这样一篇文章,一方面记录自己踩过的坑,一方面与大家分享,让大家少走弯路,并不...

    ThinkSNS 评论0 收藏0
  • 使用PHPExcel读写excel

    摘要:要求,使用了名字空间编码规范最新的语言新特性对版本的要求加强。已经放出稳定版,官方不再建议使用。保存和导入的行为分别由和负责。注意不要混淆和对象持有数据,和是对其进行序列化和反序列化的辅助类。单元隶属于具体的表单,使用上和表单类互动最多。 转载请注明文章出处:https://tlanyan.me/use-phpexc... PHPOffice出品的PHPExcel是PHP读取和生成Ex...

    wupengyu 评论0 收藏0
  • 使用PHP_XLSXWriter代替PHPExcel

    摘要:能不能单独设置某个单元格的值这个目前并没有实现,现在数据的写入都是逐行写入的,不支持这么细的粒度,不过折中的做法是把不需要填充的单元格写入即可如果有什么使用问题,可以在下面留言,一起探讨使用方式 二者有何区别? PHPExcel 是一个处理Excel,CVS文件的开源框架,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,这也是PHP至今最通用的Ex...

    TZLLOG 评论0 收藏0
  • php处理Excel

    摘要:导出成为在绝大多数情况下,导出其实就是将二维数组转化为表格。要保存的的名字转换为表格的二维数组设置表格填充数据设置表格并输出导入同理,导入其实就是将的数据转化成为二维数组,这就要求必须符合格式。 遇到问题 平时在工作中,时常会出现将数据库表导出为Excel或者将Excel导入数据库表的需求。这一需求早早就已经实现过了,为了方便导入导出,我将其封装成了两个方法,作为记录。 代码实现 ph...

    gitmilk 评论0 收藏0
  • php读写excel —— PhpSpreadsheet组件

    摘要:前言是一个纯类库,它提供了一组类,允许您从不同的电子表格文件格式如和读取和写入。官方文档安装的环境要求或者更高,,组件安装使用执行命令安装依赖版本号执行完命令后会在目录下发现有了目录,代表已经下载安装成功。 前言 PhpSpreadsheet是一个纯PHP类库,它提供了一组类,允许您从不同的电子表格文件格式(如Excel和LibreOffice Calc)读取和写入。 还有一种类似的...

    Elle 评论0 收藏0

发表评论

0条评论

Nosee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<