PHPExcel类下载:
链接:文件分享 密码:5h7wsh
<?php
/**
* Excel 处理类
*/
namespace app\common\model;
use think\Model;
//引入excel
require_once ROOT_PATH . "vendor/phpoffice/phpexcel/Classes/PHPExcel.php";
require_once ROOT_PATH . "vendor/phpoffice/phpexcel/Classes/PHPExcel/IOFactory.php";
class Excel extends Model
{
/**
* @package 导出Excel并下载
* @author 自然
* @param 变量注释
* @param String $expTitle [文件名]
* @param Array $expCellName [导出标题]
* @param Array $expTableData [导出数据]
* @return [type] [description]
*/
public static function downloadExcel($expTitle, $expCellName, $expTableData)
{
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
$fileName = $expTitle;
$cellNum = count($expCellName);// 单元格长度
$dataNum = count($expTableData);
$objPHPExcel = new \PHPExcel();// 引入库
$cellName = [
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
];
$objPHPExcel->getActiveSheet(0)
->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');//合并单元格为表头
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle);// 设置表头单元格
for ($i = 0; $i < $cellNum; $i++) {
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue($cellName[$i] . '2', $expCellName[$i][1]);
// 设置列
}
// Miscellaneous glyphs, UTF-8 循环写入数据
for ($i = 0; $i < $dataNum; $i++) {
for ($j = 0; $j < $cellNum; $j++) {
$objPHPExcel->getActiveSheet(0)
->setCellValue($cellName[$j] . ($i + 3), $expTableData[$i][$expCellName[$j][0]]);
}
}
ob_end_clean();//这一步非常关键,用来清除缓冲区防止导出的excel乱码
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//"xls"参考下一条备注
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//"Excel2007"生成2007版本的xlsx,"Excel5"生成2003版本的xls 调用工厂类
return $objWriter->save('php://output');
}
/**
* @package 读取Excel文件并返回数组
* @author 自然
* @param 变量注释
* @param string $file [文件路径]
* @param string $file_type [文件类型]
* @return Array
*/
public static function importExcel($file = '', $file_type = 'xls')
{
switch ($file_type) {
case 'xls':
$type = 'Excel5';
break;
case 'xlsx':
$type = 'Excel2007';
break;
}
$objReader = \PHPExcel_IOFactory::createReader($type);
$obj_PHPExcel =$objReader->load($file, $encode = 'utf-8'); // 加载文件
$excel_array = $obj_PHPExcel->getsheet(0)->toArray(); //转换为数组格式
array_shift($excel_array); //删除第一个数组(标题);
foreach ($excel_array as $key => $value) {
if (empty($value[0])) unset($excel_array[$key]);
}
return $excel_array;
}
}