背景
PHPExcel_1.8.0导入excel,遇到trim无法处理的空格。
解决方案
$excelVal = preg_replace(“/(\s| | |\xc2\xa0)/”, ‘’, $excelVal);
完整代码
thinkphp5代码
function readExcel($file)
{
require_once EXTEND_PATH . 'PHPExcel_1.8.0/Classes/PHPExcel.php';
$reader = new PHPExcel_Reader_Excel2007();
if (!$reader->canRead($file)) {
$reader = new PHPExcel_Reader_Excel5();
if (!$reader->canRead($file))
exit(json_encode(['status' => 0, 'msg' => '请选择Excel文件']));
}
return $reader->load($file);
}
$excel = readExcel($_FILES['file']['tmp_name']);
$sheet = $excel->getSheet(0);
$maxRow = $sheet->getHighestRow();
$maxCol = $sheet->getHighestColumn();
if ($maxRow < 1) {
output(0, 'EXCEL里面没有内容');
}
$rs = array();
for ($nowRow = 0; $nowRow < $maxRow; $nowRow++) {
for ($nowCol = 0; $nowCol < Helper::xyChange($maxCol); $nowCol++) {
$address = Helper::xyChange($nowCol + 1) . ($nowRow + 1);
$excelVal = trim($sheet->getCell($address)->getValue());
$excelVal = str_replace("\n", '', $excelVal);
// 去除带空格,而trim去不掉的情况
$excelVal = preg_replace("/(\s|\ \;| |\xc2\xa0)/", '', $excelVal);
$rs[$nowRow][] = trim($excelVal);
}
}
/**
* excel 坐标转换 (按需求,扩充)
*/
public static function xyChange($var)
{
$var = trim($var);
$arr = array(
'A' => 1,
'B' => 2,
'C' => 3,
'D' => 4,
'E' => 5,
'F' => 6,
'G' => 7,
'H' => 8,
'I' => 9,
'J' => 10,
'K' => 11,
'L' => 12,
'M' => 13,
'N' => 14,
'O' => 15,
'P' => 16,
'Q' => 17,
'R' => 18,
'S' => 19,
'T' => 20,
'U' => 21,
'V' => 22,
'W' => 23,
'X' => 24,
'Y' => 25,
'Z' => 26,
'AA' => 27,
'AB' => 28,
'AC' => 29,
'AD' => 30,
'AE' => 31,
'AF' => 32,
'AG' => 33,
'AH' => 34,
'AI' => 35,
'AJ' => 36,
'AK' => 37,
'AL' => 38,
'AM' => 39,
'AN' => 40,
'AO' => 41,
'AP' => 42,
'AQ' => 43,
'AR' => 44,
'AS' => 45,
'AT' => 46,
'AU' => 47,
'AV' => 48,
'AW' => 49,
'AX' => 50,
'AY' => 51,
'AZ' => 52,
);
if (is_numeric($var)) {
foreach ($arr as $k => $v) {
if ($v == $var) {
return $k;
}
}
return false;
} else {
if (isset($arr[$var])) {
return $arr[$var];
}
return false;
}
}