背景
表格数据超过26列, 也就是在Z列之前没有AA列及以后的情况, 测试一直都没有问题,超过,就会获取不到数据了
解决方案
private function getExcelData()
{
//获取excel文件
$file = $_FILES['poily']['tmp_name'];
//实例化excel处理类
$PHPReader = new \PHPExcel_Reader_Excel2007();
if (!$PHPReader->canRead($file)) {
$PHPReader = new \PHPExcel_Reader_Excel5();
if (!$PHPReader->canRead($file)) {
return false;
}
}
$PHPExcel = $PHPReader->load($file);
$currentSheet = $PHPExcel->getSheet(0);//读取第一个工作表
$allRow = $currentSheet->getHighestRow();//取得一共有多少行
//这两段很重要
$allColumn = $currentSheet->getHighestColumn();//取得最大的列号
$allColumn = \PHPExcel_Cell::columnIndexFromString($allColumn);//将列数转换为数字 列数大于Z的必须转 A->1 AA->27
$arr = [];
//从第一行开始读 第一行为标题
for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {
//从第A列开始输出
for ($currentColumn = 0; $currentColumn < $allColumn; $currentColumn++) {
//plan 1
//$strColumn = \PHPExcel_Cell::stringFromColumnIndex($currentColumn);//将数字转换为字母 0->A 26->AA
//$val = $currentSheet->getCell($strColumn.$currentRow)->getValue();
//plan 2
$val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();
//如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出 $arr[$currentRow][]= iconv('utf-8','gb2312', $val)."\t";
//将每列内容读取到数组中
$arr[$currentRow][] = trim($val);
}
}
//删除全部为空的行
foreach ($arr as $key => $vals) {
$tmp = '';
foreach ($vals as $v) {
$tmp .= $v;
}
if (!$tmp) unset($arr[$key]);
}
return $arr;
}
关键代码
PHPExcel_Cell::columnIndexFromString($allColumn) //将列数转换为数字 列数大于Z的必须转 A->1 AA->27