【PHP】【组件使用】【phpexcel】【phpexcel导入导出】
一、前提
PHP 7.3
tp3.2
tp5版本及以上的可能需要修改
二、phpexcel包引入
composer require phpoffice/phpexcel
三、复用代码
3.1、导入功能
/**
* 数据导入功能
* @param array $file 上传文件的相关信息($_FILES对应得)
* @param int $headerNum 去除表头行数
* @param array $keyArr 表头名集合 当表头和数据库不一致时,需要手动填写,比如都是中文时
* @return array
* @throws \PHPExcel_Exception
* @throws \PHPExcel_Reader_Exception
*/
public function excelToArray($file, $keyArr = [], $headerNum = 1)
{
vendor("PHPExcel.PHPExcel");
$objPHPExcel = \PHPExcel_IOFactory::load($file['tmp_name']);//读取上传的文件
$arrExcel = $objPHPExcel->getSheet()->toArray();//获取其中的数据
if (empty($keyArr)) {
$key = $arrExcel[0]; // 返回 excel 标题(用作数组的键)
} else {
$key = $keyArr;
}
array_splice($arrExcel, 0, $headerNum); // 单独移除两个表头
// 整理数据(使其变成关联数组)
foreach ($arrExcel as &$item) {
$item = array_combine($key, $item);
// 此处可以直接进行数据预处理
}
return $arrExcel;
}
补充:
$file = [];
foreach ($_FILES['file'] as $k => $v) {
$file[$k] = $v[0];
}
3.2、导出功能
/**
* 数据导出功能
* @param $cellType 主要用于id过长的数据进行特殊处理
* @param array $data 数据
* @param string $title 标题
* @param int $downloadType 0:浏览器 1:下载缓存文件
* @param string $formats 文件类型
* @param string $writeType 写入类型
* @throws \PHPExcel_Exception
* @throws \PHPExcel_Reader_Exception
* @throws \PHPExcel_Writer_Exception
*/
public function exportExcel($cellType = [], $data = [], $title = '', $downloadType = 0, $formats = 'xls', $writeType = 'Excel2007')
{
vendor("PHPExcel.PHPExcel");
$objPHPExcel = new \PHPExcel();
$xlsTitle = iconv('utf-8', 'gb2312', $title);//文件名称
$fileName = $title . date('_YmdH');//文件名称
$cellName = array_keys($data[0]);
//处理表头
foreach ($cellName as $k => $v) {
$objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit(chr(65 + $k) . '1', $v);//设置表头数据
}
//处理数据
foreach ($data as $row => $v) {
foreach ($cellName as $col => $v1) {
if (isset($cellType[$v1])) {//如果运营没太大要求,其实可以直接加个空字符串
$objPHPExcel->getActiveSheet()->setCellValueExplicit(chr(65 + $col) . ($row + 2), $v[$v1], $cellType[$v1]);
} else {
$objPHPExcel->getActiveSheet()->setCellValue(chr(65 + $col) . ($row + 2), $v[$v1]);
}
}
}
//导出excel
header("pragma:public");
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.' . $formats . '"');
header("Content-Disposition:attachment;filename=$fileName.$formats");//attachment新窗口打印inline本窗口打印
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, $writeType);
if ($downloadType) {
$fileName = $fileName . '.' . $formats;
$file_path = RUNTIME_PATH . 'exportExcel/' . $fileName;
$objWriter->save($file_path);
} else {
if ($formats == 'csv') {
$objWriter->setUseBOM(true);
}
$objWriter->save('php://output');
exit(0);
}
}