一 :导入excel文件
引入phpexcel类库
require(Yii::getAlias('@common').'/library/PHPExcel/PHPExcel.php'); //这是yii的引入方式 根据情况自己引入类库
1.要上传文件
if (!empty ( $_FILES ['excel'] ['name'] )){
$tmp_file = $_FILES ['excel'] ['tmp_name'];
$file_types = explode ( ".", $_FILES ['excel'] ['name'] );
$file_type = end($file_types);
/*判别是不是.xls文件,判别是不是excel文件*/
if ((strtolower ($file_type) != "xls") && (strtolower ($file_type) != "xlsx")&& (strtolower ($file_type) != "csv")){
$error ="文件类型不对";
die;
}
//DS 是自己定义的/ 和在linux里是\ 需要自己定义
$dir=date("Y-m-d",time());
if(!is_dir(ROOT_PATH.DS."upload".DS."excel".DS.$dir)){
mkdir(ROOT_PATH.DS."upload".DS."excel".DS.$dir);
}
//注意,如果upload前加 / 则报错。
$path = 'upload'.DS.'excel'.DS.$dir.DS. time().rand(1000,9999) . '.' . $file_type;
$pic_name = time() . rand(10000, 99999) . "." . $file_type;//图片名称
if (!move_uploaded_file($tmp_file, $path)) { //临时文件转移到目标文件夹
$error ="上传失败";
return $this->redirect(['index',
'error' => $error,
]);
die;
}
2.读取上传的文件
//加载导入类
$PHPExcel=new \PHPExcel();
$PHPReader = new \PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($path)){
$PHPReader = new \PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($path)){
return false;
}
}
$PHPExcel=$PHPReader->load($path);//载入文件
// print_r($PHPExcel);die;
$currentSheet=$PHPExcel->getSheet(0); //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$allColumn=$currentSheet->getHighestColumn();//获取总列数d
++$allColumn;
$allRow=$currentSheet->getHighestRow();//获取总行数
// echo $allRow;die;
// print_r($allRow);die;
$arr=array();
for($currentRow = 3;$currentRow <= $allRow;$currentRow++){
/**从第A列开始输出*/
$i=0;
for($currentColumn = 'A'; $currentColumn !=$allColumn; $currentColumn++){ //大于26列
if($i>25){
$num =ord($currentColumn)+$i;
}else{
$num =ord($currentColumn);
}
// echo $i.$currentColumn; echo "<br>";
$val = $currentSheet->getCellByColumnAndRow($num - 65,$currentRow)->getValue(); /*ord()将字符转为十进制数*/
/**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/
// $arr[$currentRow][]= iconv('utf-8','gb2312', $val)."\t";
$arr[$currentRow][]= trim($val);
$i++;
}
}
//删除全部为空的行
foreach ($arr as $key=>$vals){
$tmp = '';
foreach($vals as $v){
$tmp .= $v;
}
if(!$tmp) unset($arr[$key]);
}
print_r($arr);die;
二:导出excel
public function getExcel($fileName,$headArr,$data){
//$headArr, 设置的表头
//$data 传过来的需要导出的数据 二维数组
$date = date("Y_m_d",time());
$fileName .= "_{$date}.xls";
//创建PHPExcel对象,注意,不能少了\
$objPHPExcel = new \PHPExcel();
$objProps = $objPHPExcel->getProperties();
//设置表头 超过26列
$key = 0;
foreach($headArr as $v){
//注意,不能少了。将列数字转换为字母\
$colum = \PHPExcel_Cell::stringFromColumnIndex($key);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$key += 1;
}
//设置表头
/* $key = ord("A");
//print_r($headArr);exit;
foreach($headArr as $v){
$colum = chr($key);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$key += 1;
}*/
$column = 2; //从第二行写入数据 第一行是表头
$objActSheet = $objPHPExcel->getActiveSheet();
//print_r($data);exit;
/*foreach($data as $key => $rows){ //行写入
$span = ord("A");
foreach($rows as $keyName=>$value){// 列写入
$j = chr($span);
$objActSheet->setCellValue($j.$column, $value);
$span++;
}
$column++;
}*/
foreach($data as $key => $rows){ //行写入
$span = 0;
foreach($rows as $keyName=>$value){// 列写入
$j = \PHPExcel_Cell::stringFromColumnIndex($span);
$objActSheet->setCellValue($j.$column, $value);
$span++;
}
$column++;
}
$fileName = iconv("utf-8", "gb2312", $fileName);
/* //重命名表
$objPHPExcel->getActiveSheet()->setTitle($date);
//设置字体大小
$objPHPExcel->getDefaultStyle()->getFont()->setSize(14);
//设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
//设置默认行高
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(23);
*/
//重命名表
//$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, 'Excel5');
$objWriter->save('php://output'); //文件通过浏览器下载
exit;