ajax post 方式下载文件phpexcel文件下载

方法:

/**
 * 导出excel表格(适合没有单元格合并的情况)
 * @param array $data 二维数组
 * @param array $table_head 表头(即excel工作表的第一行标题)
 * @param array $exclude 不需要的字段
 * @param string $file_name 文件名
 * @param string $sheet_name 工作表名
 */
public function simple_export_excel(array $table_head = array(), array $data = array(), array $exclude = array(), $file_name = 'excel', $download = 1, $sheet_name = 'sheet') {
    App::import('Vendor', 'PHPExcel/PHPExcel/IOFactory');
    App::import('Vendor', 'PHPExcel/PHPExcel');

    $objPHPExcel = new PHPExcel();  // 创建PHPExcel对象

    // 设置excel文件的属性,在excel文件->属性->详细信息,可以看到这些值
    $objPHPExcel->getProperties()  //获得文件属性对象,给下文提供设置资源
                ->setCreator("admin")     //设置文件的创建者
                ->setLastModifiedBy("admin")    //最后修改者
                ->setTitle("Office 2007 XLSX Record Document" )    //标题
                ->setSubject("Office 2007 XLSX Record Document" )  //主题
                ->setDescription("Record document for Office 2007 XLSX, generated using PHP classes.") //描述
                ->setKeywords("office 2007 openxml php")    //关键字
                ->setCategory("export file");               //类别

    // 设置Excel文档的第一张sheet(工作表)为活动表,即当前操作的表。
    $objPHPExcel->setActiveSheetIndex(0);

    // 获取当前操作的工作表
    $activeSheet = $objPHPExcel->getActiveSheet();
    // 冻结首行 by yangshuiping 2019-12-04
    $objPHPExcel->getActiveSheet()->freezePane('A2');

    // 设置工作表的名称
    $activeSheet->setTitle($sheet_name);

    // 返回字符A的  ASCII 码值
    $column = ord('A');

    // 设置工作表的表头
    foreach ($table_head as $k=>$v) {
        // 字体大小
        $activeSheet->getStyle(chr($column)."1")->getFont()->setSize(13);
        // 加粗
        $activeSheet->getStyle(chr($column)."1")->getFont()->setBold(true);
        // 列宽
        $chars = strlen($v);   // 统计字节数
        $activeSheet->getColumnDimension(chr($column))->setWidth($chars*2);
        // 设置单元格的值
        $activeSheet->setCellValue(chr($column)."1", $v);
        // 设置左对齐
        $activeSheet->getStyle(chr($column))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

        $column++;
    }

    $column = ord('A');   // 返回字符的  ASCII 码值
    // 将$data中的数据填充到单元格中
    foreach ($data as $row=>$col) {
        $i=0;
        foreach ($col as $k=>$v ) {
            // 排除一些key值 by yangshuiping 2019-12-03
            if (!in_array($k, $exclude) || empty($exclude)) {
                $activeSheet->setCellValue(chr($column+$i).($row+2), $v);
                $i++;
            }
        }
    }

    // 导出Excel表格
    $file_name .= date('Ymd_His') . '.xlsx';   // 文件名
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    // $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

    if ($download) {
        ob_start();
        $objWriter->save('php://output');
        $xlsData = ob_get_contents();
        ob_end_clean();
        $data = [
            'file' => "data:application/vnd.ms-excel;base64," . base64_encode($xlsData),
            'name' => $file_name
        ];
        return $this->responseJsonResult($data);

    }else{
        $file_path = WWW_ROOT . "xxx/xx/" . $file_name;//#hardcode
        $objWriter->save($file_path);
        return $file_path;
    }
}

调用:

if ($post_request && $action == 'xxx') {
    $this->autoRender = false;
    $title = [
        'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx'
    ];
    $g_Excels = $g_Commons->GlobalController('xxx');
    $exclude = [
        'xxx',
        'xxx',
        'xxx',
        'xxx',
        'xxx',
    ];
    return $g_Excels->simple_export_excel($title, $orders, $exclude, 'xxx');
}

前端:

var page = $("#export_req").attr('url');
$("#export_req").click(function(){
    // ocs_show_overlay();
    $.ajax({
         url:page,
         type:"POST",
         async:false,
         dataType:"json",
         data:$("form").serialize(),
         timeout:3000,
         success:function(data){
           var $a = $("<a>");
           $a.attr("href",data.datas.file);
           $("body").append($a);
           $a.attr("download", data.datas.name);
           $a[0].click();
           $a.remove();
         },
         error:function(){
          console.log(data);
        }
    });
    // ocs_hide_overlay();
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SHUIPING_YANG

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值