主要运用到PHPExcel_Cell类的两个方法

1读取excel大于26列时.

  1. PHPExcel_Cell::columnIndexFromString($highestColumm)://由列名转化为列索引数字 'A->0,Z->25'
1>计算出总列数
  1. $highestColumm = $sheet->getHighestColumn(); // 获得最多的列数,返回列名的大写字母  如 'AB','F'等

2>计算出列对应的索引

  1. $end_index     = PHPExcel_Cell::columnIndexFromString($highestColumm);//由列名转为列数('AB'->28)
  1. $PHPExcel      = $reader->load($file_path_root . '/' . $file_name);//文件路径加载文件名
  2. $sheet         = $PHPExcel->getSheet(0);
  3. $highestRow    = $sheet->getHighestRow(); // 取得总行数
  4. $highestColumm = $sheet->getHighestColumn(); // 取得总列数
  5. $end_index     = PHPExcel_Cell::columnIndexFromString($highestColumm);//由列名转为列数('AB'->28)
  6. $titles  = array();
  7. $content = array();
  8. /** 循环读取每个单元格的数据 */
  9. for ($row = 1; $row <= $highestRow; $row++) {
  10. for ($column = 0; $column < $end_index; $column++) {
  11. $col_name = PHPExcel_Cell::stringFromColumnIndex($column);//由列数反转列名(0->'A')
  12. $value    = mb_convert_encoding($sheet->getCell($col_name . $row)->getValue(), 'gbk', 'utf8');//转码
  13. if ($row == 1) {
  14. //获取表头
  15. $titles[] = preg_replace('/\s/', '', $value);
  16. } else {
  17. if ($sheet->getCell($col_name . $row)->getDataType() == PHPExcel_Cell_DataType::TYPE_NUMERIC) {
  18. //数字类型时,三位精度标准来比较该数是否在0,1之间,转换为百分数,保留一位小数
  19. if (bccomp(floatval($value), floatval('1'), 3) == -1 && bccomp(floatval($value), floatval('0'), 3) == 1) {
  20. $value = sprintf("%01.1f", $value * 100) . '%';
  21. }
  22. }
  23. $content[$row][$column] = preg_replace('/\s/', '', $value);
  24. }
  25. }
  26. }

ps:

 
上传excel时,如果没有读写权限,可以写到tmp目录下,这个目录下一般都是有读写权限的.

2写大于26列的excel

  1. $title_col = PHPExcel_Cell::stringFromColumnIndex($k);//标题行列名,由列索引反转列名(0->'A')
  1. </pre><pre name="code" class="php"><pre name="code" class="php">foreach($titles as $k =>$t)
  2. {
  3. $title_col = PHPExcel_Cell::stringFromColumnIndex($k);//标题行列名,由列索引反转列名(0->'A')
  4. $this->_objPHPExcel->getActiveSheet()->getColumnDimension($title_col)->setWidth(12);
  5. $this->_objPHPExcel->setActiveSheetIndex()->getStyle($title_col."1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  6. $this->_objPHPExcel->getActiveSheet()->setCellValue($title_col."1",iconv('GBK','UTF-8//IGNORE',$t));//标题行
  7. }

3读取excel百分号时自动转化为了小数

处理单元格数据时,如果有百分号小数会自动转为小数,处理时需要判断单元格数据类型,因为初步认定只有百分数是小数,其余各列不存在小数.故处理结果:
判断数据类型为数字,其余几种类型都在 PHPExcel_Cell_DataType类中:
 
  1. /* Data types */
  2. const TYPE_STRING2  = 'str';
  3. const TYPE_STRING   = 's';
  4. const TYPE_FORMULA  = 'f';
  5. const TYPE_NUMERIC  = 'n';
  6. const TYPE_BOOL     = 'b';
  7. const TYPE_NULL     = 'null';
  8. const TYPE_INLINE   = 'inlineStr';
  9. const TYPE_ERROR    = 'e';
  1. if ($sheet->getCell($col_name . $row)->getDataType() == PHPExcel_Cell_DataType::TYPE_NUMERIC) {
  2. //数字类型时,三位精度标准来比较该数是否在0,1之间,转换为百分数,保留一位小数
  3. if (bccomp(floatval($value), floatval('1'), 3) == -1 && bccomp(floatval($value), floatval('0'), 3) == 1) {
  4. $value = sprintf("%01.1f", $value * 100) . '%';
  5. }
  6. }

判断浮点数是否在0-1之间(三位精度),然后组合成百分数即可:

  1. $value = sprintf("%01.1f", $value * 100) . '%';

phpexcel如何读和写大于26列的excel的更多相关文章

  1. phpexcel 生成大于26列数据

    function excelExport2($fileName = '', $headArr = [], $data = [], $widths=[]) { ob_clean(); // $fileN ...

  2. PHPExcel导出数据时字段超过26列出错Invalid cell coordinate [1

    http://blog.csdn.net/dl425134845/article/details/46650961 以下是解决方案函数 /** *   方法名:    getExcel *   作用  ...

  3. phpexcel导出超过26列解决方案

    原文:phpexcel导出超过26列解决方案 将列的数字序号转成字母使用,代码如下:  PHPExcel_Cell::stringFromColumnIndex($i); // 从o,1,2,3,.. ...

  4. yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法

    作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension​ 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

  5. markdown简易快速的编辑格式(易读易写)

    实现简单快速书写,格式指定简便.易读易写 讲解http://wowubuntu.com/markdown/ 简单使用的讲解:http://www.ituring.com.cn/article/23 代 ...

  6. python读、写、修改、追写excel文件

    三个工具包 python操作excel的三个工具包如下 xlrd: 对excel进行读相关操作 xlwt: 对excel进行写相关操作 xlutils: 对excel读写操作的整合 注意,只能操作.x ...

  7. direct path read/write (直接路径读/写)

    转载:http://www.dbtan.com/2010/04/direct-path-readwrite.html direct path read/write (直接路径读/写): 直接路径读(d ...

  8. python3 对excel读、写、修改的操作

    一.对excel的写操作实例: 将一个列表的数据写入excel, 第一行是标题,下面行数具体的数据 import xlwt #只能写不能读 stus = [['姓名', '年龄', '性别', '分数 ...

  9. 网络编程学习笔记--1.socket可读可写条件

    转至 :http://blog.csdn.net/majianfei1023/article/details/45788591 socket可读可写条件,经常做为面试题被问,因为它考察被面试者对网络编 ...

随机推荐

  1. 从新向你学习javase(第一天)

    1:阐述JDK和JRE之间区别 jdk(工具)>jre(运行环境)>jvm(虚拟机) 2: 能够使用常见的DOS命令 d:(进入D盘下),cd +路径(进入到当前路径),cd..(返回上一 ...

  2. CSP2019 —— 今年欢笑复明年,不知退役在眼前

    关于2019CSP-J/-S的一些体会 又是一年退役季,想起在群里看到大佬的一句诗,感慨万千. 今年欢笑复明年,不知退役在眼前 于是便心生文意,随便写点东西来给自己康康. 先说说这次的成绩吧.大家应该 ...

  3. Hibernate异常:MappingException

    异常信息: org.hibernate.MappingException: Unknown entity: com.geore.pojo.customer.Customer 造成原因: Mapping ...

  4. Git-第一篇认识git,核心对象,常用命令

    1.git一般使用流程 4大核心对象:工作区.暂存区.本地库.远端库. 2.常用命令 1>git init:初始化本地仓库 2>git clone:克隆仓库到指定地方 3>git a ...

  5. npm基本介绍及使用

    1.什么是npm npm全称node package manager,是node包管理和分发工具.可以理解为前端的maven.通过npm可以很方便的下载js库,管理前端工程.node已经集成npm工具 ...

  6. 创建客户端项目并读取服务化的配置中心(Consul + Spring Cloud Config)

    创建客户端项目并读取服务化的配置中心 将配置中心注册到服务中心(Consul) POM文件添加依赖: <dependency> <groupId>org.springframe ...

  7. Oracle数据库控制台常用命令

    安装好数据库以后可以通过“Win+R”打开控制台,在控制台登录Oracle输入命令来操作数据库. SQLPlus命令: SQLPlus命令是用来登录Oracle数据库的命令,有两种写法,分别如下: ( ...

  8. Poj 3268 Silver cow party 迪杰斯特拉+反向矩阵

    Silver cow party 迪杰斯特拉+反向 题意 有n个农场,编号1到n,每个农场都有一头牛.他们想要举行一个party,其他牛到要一个定好的农场中去.每个农场之间有路相连,但是这个路是单向的 ...

  9. UI标签库专题十:JEECG智能开发平台 Form(form标签)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/30099121  1. Form(f ...

  10. Form表单组件验证

    第一版:最基本版本 views源码 #——————————————————————form验证—————————————— from django import forms from django.f ...