【PHP】【组件使用】【phpexcel】【phpexcel导入导出】

【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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值