composer require
phpoffice/phpspreadsheet=1.8.2
安装 phpspreadsheet
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); //实例化阅读器对象。 $spreadsheet = $reader->load($filename); //将文件读取到到$spreadsheet对象中 $sheet = $spreadsheet->getSheet(0);//sheet $highestColumn = $sheet->getHighestColumn(); // 取得总列数 $highestRow = $sheet->getHighestRow(); // 取得总行数
for ($col = 1; $col <= $highestColumnIndex; ++$col) //列数是以A列开始 { $column_name = $sheet->getCellByColumnAndRow($col, 1)->getFormattedValue(); if(in_array($column_name,array_keys($format_column)))$column[] = ['clo' => $col,'key' => $format_column[$column_name]]; } // 2 根据以上确定的列直接循环取值 for ($row = 2; $row <= $highestRow; ++$row) //行号从1开始 { $row_data = []; foreach ($column as $item){ switch ($item['key']) { case "tax": $value = $sheet->getCellByColumnAndRow($item['clo'], $row)->getFormattedValue(); if(strpos($value, "%") > 0) $value = (float)$value/100; $row_data[$item['key']] = $value; break; case "num" : $row_data[$item['key']] = (int)$sheet->getCellByColumnAndRow($item['clo'], $row)->getCalculatedValue(true); break; case "money": $res = $sheet->getCellByColumnAndRow($item['clo'], $row)->getFormattedValue(); $row_data[$item['key']] = str_replace(['¥', ','], '', $res);//一般先取出结果,然后自己处理比较方便。 break; case "time": $date = $sheet->getCellByColumnAndRow($item['clo'], $row)->getValue(); if(!$date){ $row_data[$item['key']] = null; }else{ $row_data[$item['key']] = gmdate('Y-m-d', ($date - 25569) * 24 * 3600); //gmdate返回UTC的时间 } break; default : $row_data[$item['key']]= Common::trim($sheet->getCellByColumnAndRow($item['clo'], $row)->getFormattedValue()); } } if(count($row_data) != count($format_column)) throw new ApiException(Code::EXCEL_FORMAT_ERROR); //空数据过滤 $res_data[] = $row_data; } $this->filterData($res_data); return array_values($res_data); //过滤空数据 private function filterData(&$row_data) { foreach ($row_data as $key => $item){ $is_null = false; foreach ($item as $iv) { if(!empty($iv)) { $is_null = true; break; } } if($is_null == false ) unset($row_data[$key]); } }
这里导入的时候会报错:
simplexml_load_string(): Entity: line 2: parser error : Input is not proper UTF-8...
我看到里边报错的地方在Properties.php,当我输出$propertyData是乱码的,所以对其进行转码
到了这里是没有任何问题的,但当我把写的转码删除居然又成功了,经过反复思考,我觉得是Properties.php这个文件的编码问题,当我用编辑器修改的时候,编码就变回正常的UTF-8了,个人想法是这样的,如果遇到不同看法的可以留言给我,谢谢!
作者:Mark 出处:https://mp.csdn.net/console/editor/html/105730455
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句