★安装
1.安装composer
安装方法: http://docs.phpcomposer.com/00-intro.html#Installation-Windows
cmd =》 composer -v 检查是否安装成功
2.cmd =》切换到项目目录,执行composer require phpoffice/phpexcel。之后等待安装完成,会自动在vendor目录生成文件
★应用
1.导出
<a href="{:url('***/***/out')}" class="btn btn-primary">导出</a>
private function getExcel($fileName,$headArr,$data){
//对数据进行检验
if(empty($data) || !is_array($data)){
die("data must be a array");
}
//检查文件名
if(empty($fileName)){
exit;
}
$date = date("Y_m_d",time());
$fileName .= "_{$date}.xlsx";
$objPHPExcel = new PHPExcel();
$objProps = $objPHPExcel->getProperties();
foreach($headArr as $k=>$v){
if($k<26){
$colum[$k]=chr(65+$k);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum[$k].'1', $v);
}else if($k<702){
$colum[$k]=chr(64+($k/26)).chr(65+$k%26);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum[$k].'1', $v);
}
}
$column=2;
$objActSheet = $objPHPExcel->getActiveSheet();
foreach($data as $key => $rows){ //行写入
$n = 0;
foreach($rows as $keyName=>$value){// 列写入
$j = $colum[$n];
$objActSheet->setCellValueExplicit($j.$column,$value,PHPExcel_Cell_DataType::TYPE_STRING);
$n++;
}
$column++;
}
$fileName = iconv("utf-8", "gb2312", $fileName);
//重命名表
// $objPHPExcel->getActiveSheet()->setTitle('test');
//设置活动单指数到第一个表,所以Excel打开这是第一个表
$objPHPExcel->setActiveSheetIndex(0);
ob_end_clean(); //清空缓存
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename="$fileName"");
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//文件通过浏览器下载
$objWriter->save('php://output');exit;
}
2.导入
A.上传文件,这步略;
B. 获取文件地址和名字,即是 $filename = "./1.xlsx";
C.执行 下面方法即可,$arr为从excel中获取到的数据
private function excelToArray($fliepath,$table){
$phpexce = new PHPExcel();
$phpReader = new PHPExcel_Reader_Excel2007();
if(!$phpReader->canRead($fliepath)){
$phpReader = new PHPExcel_Reader_Excel5();
if(!$phpReader->canRead($fliepath)){
echo 'no excel';
return;
}
}
$phpexcel = $phpReader->load($fliepath);
$currentSheet = $phpexcel->getSheet(0); //读取excel文件中的第一个工作表
$allColumn = $currentSheet->getHighestColumn(); //取得最大的列号
$allRow = $currentSheet->getHighestRow(); //取得一共有多少行
$erp_orders_id = array(); //声明数组
$val=[];
for($currentRow = 1;$currentRow <= $allRow;$currentRow++){
/**从第A列开始输出*/
for($currentColumn= 0;$currentColumn< (ord($allColumn)-64); $currentColumn++){
if($currentColumn<26){
$colum=chr(65+$currentColumn);
}else if($currentColumn<702){
$colum=chr(64+($currentColumn/26)).chr(65+$currentColumn%26);
}
$v = $currentSheet->getCell($colum.$currentRow)->getValue();/**ord()将字符转为十进制数*/
$val[$table[$currentColumn]] = rtrim(ltrim((String)$v,'="'),'"');
/**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/
//echo iconv('utf-8','gb2312', $val)." ";
}
if($val!=''){
$erp_orders_id[$currentRow] = $val;
}
}
return $erp_orders_id;
}
★错误总结:
1.ERR_INVALID_RESPONSE 这个是由于PHP版本过高导致的。在1.8.1版本中已经解决
当前解决方法: 删除PHPExcel / Classes / PHPExcel / Calculation / Functions.php中 581行左右删除break即可.
2. 可能导出的数据混乱
这个可能是缓存导致的,清空就好 代码中添加:ob_end_clean();