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

1读取excel大于26列时.

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

2>计算出列对应的索引

[plain] view plaincopy print?
  1. $end_index     = PHPExcel_Cell::columnIndexFromString($highestColumm);//由列名转为列数('AB'->28)
[plain] view plaincopy print?
  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

[php] view plaincopy print?
  1. $title_col = PHPExcel_Cell::stringFromColumnIndex($k);//标题行列名,由列索引反转列名(0->'A')
[php] view plaincopy print?
  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类中:
[php] view plaincopy print?
  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';
[php] view plaincopy print?
  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之间(三位精度),然后组合成百分数即可:

[php] view plaincopy print?
  1. $value = sprintf("%01.1f", $value * 100) . '%';

转载于:https://www.cnblogs.com/bit5566/p/6735137.html

phpexcel如何读和写大于26列的excel相关推荐

  1. php导出excel列数太多,php生成excel列名,超过26列大于Z问题解决办法

    我们生成excel都会使用phpExcel类了,下面我来给大家介绍在生成excel列名超过26列大于Z问题解决办法吧. 这是phpExcel类中的方法.今天查到了,记录一下备忘.<?php pu ...

  2. php execl 列的长度,php生成excel列名超过26列大于Z时的解决方法

    本文实例讲述了php生成excel列名超过26列大于Z时的解决方法.分享给大家供大家参考.具体分析如下: 我们生成excel都会使用phpExcel类,这里就来给大家介绍在生成excel列名超过26列 ...

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

    phpexcel导出超过26列解决方案 原文:phpexcel导出超过26列解决方案 将列的数字序号转成字母使用,代码如下:   PHPExcel_Cell::stringFromColumnInde ...

  4. phpexcel设置AAA单元格,兼容大于702列数据

    一.前言 线上好好运行的程序突然报错:Invalid cell coordinate [A2 ,是个很偶然的错误,而且并不是整个下载功能都不能用了,只是当选择特定条件的时候才会报这个错,经过各种排查终 ...

  5. 【收藏】C#面试题整理笔试篇(最全1000+道带答案)300道填空 + 300道选择 + 300道判断 + 70道读程序写结果和看程序填空 + 100道简答题

    <程序员>曾陪伴了无数开发者成长.<新程序员>全新归来,推荐给大家! <新程序员> 一.填空: 1.操作符( && )被用来说明两个条件同为真的情况 ...

  6. 这是我读过写得最好的【秒杀系统架构】分析与实战!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/ewVWv 1 秒杀业务分析 2 ...

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

    欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/45788591 socket可读可写条件,经常做为面试题被问,因为 ...

  8. python读文件写文件-python 文件读写操作

    读文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): >>> f = open('test.txt', 'r') r表示是文本文件,rb是二进制文件 ...

  9. Python 学习笔记(3)对txt文件的读与写操作(上)

    目录 1.file 对象 2.open() 方法 3.txt文件的读与写 3.1.写txt文件 3.2.读txt文件 3.2.在文件末尾续写文件 4.写在最后 1.file 对象 file 对象使用 ...

最新文章

  1. 小米回应暴力裁员:已提前三个月通知不续签合同,并且给了N+1补偿
  2. 贾扬清、Alex Smola、Julia创始人等大咖齐聚,WAIC开发者日共话AI未来
  3. php 最大数字,PHP 计算至少是其他数字两倍的最大数的实现代码
  4. python 4.5%2_程序运行慢?你怕是写的假 Python
  5. SharePoint Adventures : Using Claims with Reporting Services
  6. 每日一皮:给老板演示刚做好的功能...
  7. JVM内存区域:常用指令集
  8. brew mysql 无法启动_MAC OSX brew 升级 mysql5.6到5.7无法启动的问题
  9. python实现贝叶斯分类器_python实现简单的朴素贝叶斯分类器
  10. mysql 学习笔记03 常用数据类型
  11. 图书管理销售系统需求分析报告,对性能的规定以及运行环境规定部分
  12. PRML-系列二之2.2
  13. 4 读写文件_和尧名大叔一起从0开始学Python编程-简单读写文件
  14. JAVA计算机毕业设计钢材商贸公司网络购销管理系统Mybatis+系统+数据库+调试部署
  15. exchange服务器维护,EXCHANGE故障排除步骤简述
  16. nebula模拟器_nebula(街机模拟器) V 2.1.5.0 官方版
  17. gem5中的O3 Pipeline Viewer Visualization实现方法
  18. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识...
  19. 南怀瑾:秘方集(治高血压、失眠、肺病、肠胃病、近视、伏淫欲还精补脑、保健长寿)
  20. Android性能优化 -- 自启动管理

热门文章

  1. err-disabled
  2. iDow Brand——关于一个商标的构思。
  3. 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及
  4. BZOJ1055: [HAOI2008]玩具取名[区间DP]
  5. spring jdbcTemplate 插入对象返回主键值
  6. Mbps、Kbps、bps、MB、KB
  7. A3D8的水–WaterMaterial for Alternativa3D 8
  8. P01:01背包问题(转)
  9. Java Stream API进阶篇
  10. 可作为GC Roots的对象