您现在的位置是:首页 > 个人博客个人博客

PHPExcel列名超过26列大于Z时的解决方法

龙沐星2019-11-06【个人博客】37094人已围观

简介相信很多朋友在使用 PHPExcel 获取列或者在做列判断时,发现如果列字母大于26列时,如:AA,AB......小编也遇到同样的问题,苦思冥想下,终于找到方法



相信很多朋友在使用 PHPExcel 获取列或者在做列判断时,发现如果列字母大于26列时,如:AA,AB......

小编也遇到同样的问题,苦思冥想下,终于找到方法,如下:

1、引入PHPExcel包,获取总行数,获取总列数这些就不说了

2、此处是基于thinkPHP举例的;其他框架等都类似
		public function excel() {
		//导入PHPExcel包
		vendor("PHPExcel.PHPExcel");
		//指定excel文件路径
		$filePath = 'test.xls';
		//实例化PHPExcel
		$PHPExcel = new \PHPExcel();

		//默认用excel2007读取excel,若格式不对,则用之前的版本进行读取
		$PHPReader = new \PHPExcel_Reader_Excel2007();
		if (!$PHPReader->canRead($filePath)) {
		$PHPReader = new \PHPExcel_Reader_Excel5();
		if (!$PHPReader->canRead($filePath)) {
		echo 'no Excel';
		return;
		}
		}
		//加载test.xls
		$PHPExcel = $PHPReader->load($filePath);
		//获取excel总表数
		$sheetCount = $PHPExcel->getSheetCount();
		//设置程序执行不超时
		set_time_limit(0);
		//此处默认从第二个工作表开始读取,若要从第一个工作表读取,设置$sheet = 0;注意:$sheet不能等于$sheetCount
		for ($sheet = 0; $sheet < $sheetCount; $sheet++) {
		//读取excel文件中的第一个工作表,工作表排序从0开始
		$currentSheet = $PHPExcel->getSheet($sheet);
		//取得最大的列号
		$allColumn = $currentSheet->getHighestColumn();
		//取得一共有多少行
		$allRow = $currentSheet->getHighestRow();
		//从第一行开始输出,如果excel表中第一行为列名,则$currentRow初始值设置为2
		for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) { //循环行
		//从第A列开始输出
		for ($currentColumn = 'A'; $currentColumn != 'DQ'; $currentColumn++) { //循环列
		//ord()将字符转为十进制数
		$letterToNum = \PHPExcel_Cell::columnIndexFromString($currentColumn); //调用columnIndexFromString()内置方法;把列号转化成数字,A列转化为1,B转化为2
		//获取每一个对应单元格的内容
		$val[] = $currentSheet->getCellByColumnAndRow($letterToNum - 1, $currentRow)->getValue();
		}
		//此处的$val数组里为第一行的所有数据;编写自己的逻辑方法来处理数据
		}
		}
		//做输出返回逻辑

		}

		


注:每句小编都有写好注释;值得提醒的是:

PHPExcel里有内置方法:

将列的数字序号转成字母使用,代码: \PHPExcel_Cell::stringFromColumnIndex(数字); // 从0开始

将列的字母转成数字序号使用,代码: \PHPExcel_Cell::columnIndexFromString(字母);

PHPExcel_Cell 前都必须加反斜线 \

另外:在循环列时;判断列时

如果列小于26列时,可以用:

for ($currentColumn = 'A'; $currentColumn <= 'Z'; $currentColumn++) {}

如果列大于26列时,会出现两个或以上的字母,上面这种方法就判断不到了,可以改用如下方法:

for ($currentColumn = 'A'; $currentColumn != 'DQ'; $currentColumn++) {}

很赞哦! (37094)

文章评论

  • 评论已关闭

站点信息

  • 建站时间:2015-07-29
  • 网站程序:YII 2.0
  • 文章统计:24条
  • 文章评论:37094条
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们