ホームページ > バックエンド開発 > PHPチュートリアル > tp5のphpexcelでのテーブル生成の共有例

tp5のphpexcelでのテーブル生成の共有例

小云云
リリース: 2023-03-21 06:24:02
オリジナル
2833 人が閲覧しました

最近のプロジェクトでは、テーブルの生成に phpexcel を使用する必要がありますが、Web ページから Excel をエクスポートする場合、ファイルのサフィックスは常に html になります。長い間デバッグを続けた結果、ヘッダーが出力される前に ob_end_clean() を使用して php バッファーの内容をクリアする必要があることがわかりました。 herder ヘッダーが出力される前は、php はスペースを含めて何も出力できないため、この時点でのヘッダー情報はすでに固定されているため、設定した php ヘッダーは無効になります。

Excel出力時の文字化け問題もこれで解決です。

 /**
     * 下载excel表格
     */
    public function down_excel()
    {
        $params = $_GET;
        $filename = $params['cname'] . '收银明细列表' . date('Y-m-d');
        $objPHPExcel = new \PHPExcel();
        //设置表头信息
        $letter = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L');
        $excel_column = array(
            'id' => "订单号",
            'dt' => "交易时间",
            'money' => "金额",
            'status' => "交易状态",
            'pay_type' => "支付渠道",
            'device' => "终端号",
            'operator' => "收银员",
            'pay_id' => "渠道流水号",
            'client_name' => "商户名称",
            'pay_scense' => "支付场景",
            'operate_fee' => "手续费",
            'no' => "小票单号",
        );
        $new_letter = [];
        $new_excel_column = [];
        foreach ($params['act_name'] as $k => $d) {
            $new_letter[$d] = $letter[$k];
            $new_excel_column[$d] = $excel_column[$d];
        }
        foreach ($new_excel_column as $k => $d) {
            //设置行宽自动调整
            $objPHPExcel->getActiveSheet()->getColumnDimension($new_letter[$k])->setWidth(12);
            $objPHPExcel->getActiveSheet()->setCellValue($new_letter[$k] . '1', $d);
        }
        //填充表格信息
        $data['rows'] = [];
        foreach ($params['down_class'] as $item) {
            switch ($item) {
                case 'pay_success':
                    $params['dm_status'] = 2;
                    break;
                case 'refund_success':
                    $params['dm_status'] = 4;
                    break;
                case 'pay_fail':
                    $params['dm_status'] = 3;
                    break;
                case 'pay_undefined':
                    $params['dm_status'] = 5;
                    break;
            }
            $ret = $this->getData($params);
            $data['rows'] = array_merge($data['rows'], $ret['rows']);
        }
        $total = 0;
        if (!empty($data['rows'])) {
            foreach ($data['rows'] as $k => $d) {
                $i = $k + 2;
                foreach ($new_letter as $key => $item) {
                    //填充数据
                    $objPHPExcel->getActiveSheet()->setCellValue($item . $i, strip_tags($d[$key]));
                }
                $total += strip_tags($d['money']);
            }
        }
        $index = count($data['rows']) + 2;
        $objPHPExcel->getActiveSheet()->mergeCells("A{$index}:B{$index}");
        $objPHPExcel->getActiveSheet()->setCellValue('A' . $index, '合计');
        $objPHPExcel->getActiveSheet()->setCellValue('C' . $index, $total);
        //保存表格版本格式
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel2007");
        //下载表格
        ob_end_clean();    //关闭缓冲区之后再输出header头,在header设置之前,可能某个地方有了输出,导致Content-Type的类型为text/html,所以输出的表格后缀才会是html
        header('Content-Type: application/octet-stream');
        header("Content-Disposition: attachment; filename=\"{$filename}.xlsx\"");
        $objWriter->save("php://output");
    }
ログイン後にコピー

関連する推奨事項:

Linuxシステムでのphpexcelエラーを解決する方法

TP3.2のphpexcelでExcelをインポートする方法を共有

PHPExcelでセルを結合および分割する方法

以上がtp5のphpexcelでのテーブル生成の共有例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート