php excel的幾種導出方式

1.csv導出

   $where = stripcslashes($_GET['where']);
        header('Content-type:text/csv');
        header('Content-Disposition:attachment;filename=' . date('Y-m-d-His-') . rand(1000, 9999) . '.csv');
        $head = array(_('ID'), _('日期'), _('總條數'), _('單價'), _('總額'));
        echo '"' . iconv('UTF-8', 'gbk', implode('","', $head)) . '"' . "\r\n";
        $data = Db::name('sms_stat')->where($where)->select();
        foreach ($data as $key => $val) {
            $csv = [];
            $csv['id'] = $val['id'];
            $csv['date'] = strstr($val['date'], ' ', true);
            $csv['count'] = $val['count'];
            $csv['unitprice'] = $val['unitprice'];
            $csv['total'] = $val['total'];
            echo '"' . implode('","', $csv) . '"' . "\r\n";
        }

2.xlsxwriter導出

  $where = ' 1=1 ';
        $begin_month = input('begin_month');
        if (!empty($begin_month)) {
            $where .= " and month >= '" . $begin_month . "'";
        }
        $end_month = input('end_month');
        if (!empty($end_month)) {
            $where .= " and month <= '" . $end_month . "'";
        }
        if (!empty($begin_month) || !empty($end_month)) {
            if (empty($begin_month)) {
                $filename = $end_month . "之前.xlsx";
            } else if (empty($end_month)) {
                $filename = $begin_month . "之後.xlsx";
            } else {
                $filename = $begin_month . "至" . $end_month . ".xlsx";
            }

            header('Content-disposition: attachment; filename="' . \XLSXWriter::sanitize_filename($filename) . '"');
            header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            header('Content-Transfer-Encoding: binary');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            $heads = ['ID' => 'string', '月份' => 'string', '總計數' => 'string', '單價' => 'string', '總費用' => 'string'];
            $fields = ['id', 'month', 'count', 'unitprice', 'total'];
            $writer = new \XLSXWriter();
            $writer->writeSheetHeader('Sheet1', $heads);
            $sms_stat_month = new SmsStatMonth();
            $sms_stat_month->field($fields)->where($where)->chunk(1000, function ($data) use ($fields, $writer) {
                foreach ($data as $key => $rows) {
                    $writer->writeSheetRow('Sheet1', $rows->toArray());
                }
            });
            $writer->writeToStdOut();
            exit(0);
        }

3.PHPExcel_IOFactory導出

set_time_limit(1200);
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/vnd.ms-execl");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");
        header('Content-Disposition: attachment;filename="' . date('Ymd-His-') . rand(1000, 9999) . '.xlsx"');
        header("Content-Transfer-Encoding:binary");
        $tableid = input('tableid');
        $dict = AdminDict::get(['name' => $_GET['type'], 'parent_number' => 'c926cecf9156e3d2d1ecc9ec43ec6be6']);
        if (empty($dict)) {
            echo json_encode(['success' => false, 'msg' => '所屬項目填寫有誤!']);
            exit;
        }
        $order_tpl = CrmOrderExportTpl::all(['tpl_type' => $dict->number]);
        $head = ['ID'];
        $fields_export = [];
        $fields_export[] = 'id';
        foreach ($order_tpl as $item) {
            $head[] = $item->excel_name;
            $field = AdminField::get(['alias' => $item->field, 'tableid' => $tableid]);
            $fields_export[] = $field->fieldid;
        }
        $fields = db('admin_field')->where(['tableid' => $tableid])->select();
        $fields = setSelectKey($fields, 'fieldid');
        $fields_sql = ['id'];
        foreach ($fields_export as $val) {
            if ($val != 'id') {
                $fields_sql[] = $fields[$val]['alias'];
                $fields[$val]['setting'] = string2array($fields[$val]['setting']);
                //$head[] = $fields[$val]['name'];
            }
        }
        $fields_sql = implode(',', $fields_sql);
        $where = $_GET['where'];
        $tablename = $this->model_main->getTableName($tableid);
        $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
        $cacheSettings = array('memoryCacheSize' => '16MB');
        \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
        $PHPExcel = new \PHPExcel();
        $PHPSheet = $PHPExcel->getActiveSheet();
        $PHPExcel->setActiveSheetIndex(0);
        $key = 0; // 設置表頭
        foreach ($head as $k => $v) {
            $colum = \PHPExcel_Cell::stringFromColumnIndex($key);
            $PHPSheet->getColumnDimension($colum)->setWidth(40);
            $PHPSheet->getStyle($colum . '1')->applyFromArray(
                array(
                    'fill' => array(
                        'type' => \PHPExcel_Style_Fill::FILL_SOLID,
                        'color' => array('rgb' => '92D050')
                    )
                )
            );
            $PHPSheet->getStyle($colum)->applyFromArray(
                array(
                    'alignment' => array(
                        'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
                    )
                )
            );
            //設置首行
            $PHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
            $PHPSheet->freezePaneByColumnAndRow(0, 2);//設置首行固定
            $key += 1;
        }
        $column = 2;
        Db::name($tablename)->field($fields_sql)->where($where)->chunk(1000, function ($data) use ($tableid, &$column, $fields, $PHPSheet) {
            $data = $this->model_main->model_list($tableid, $data, $fields);
            foreach ($data as $key => $rows) { // 行寫入
                $span = 0;
                foreach ($rows as $keyName => $value) { // 列寫入
                    if (substr($keyName, 0, 1) === '_' && substr($keyName, -1) === '_') {
                        continue;
                    }
                    $PHPSheet->setCellValue(\PHPExcel_Cell::stringFromColumnIndex($span) . $column, $value . "\t");
                    $span++;
                }
                $column++;
            }
        });
        $PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel, "Excel2007");
        $PHPWriter->save("php://output");
        exit;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章