文章

xlswriter实现导出功能

PHP扩展-xlswriter实现导出功能

    /**
     * 表头
     *
     * @param $title
     * @return array
     * @author fangxinlei
     * @datetime 2024/9/13 14:21
     */
    public static function getHeader($title): array
    {
        $service = new \app\service\organize\FormService(new \app\dao\organize\FormDao());
        $data = $service->getFormByTitle($title);

        // "index" => "序号"
        return array_column($data, 'title', 'field');
    }


   /**
     * 格式化数据
     * 
     * @param $title
     * @param $data
     * @return array
     * @author fangxinlei
     * @datetime 2024/9/13 14:18
     */
    private static function handleDataByTitle($title, $data): array
    {
        $sortData = [];
        foreach ($data as $item) {
            $tmp = [];
            foreach ($title as $t) {
                $tmp[] = $item[$t];
            }

            $sortData[] = $tmp;
        }

        return $sortData;
    }


    /**
     * @param $data
     * @param $filename
     * @param $header
     * @return void
     * @author fangxinlei
     * @datetime 2024/9/13 14:19
     */
    public static function exportByXls($data, $filename, $header)
    {
        $config = [
            'path' => self::getTmpDir() . '/',
        ];

//        $filename   = 'tutorial01.xlsx';
        $xlsxObject = new Excel($config);

        // Init File
        $fileObject = $xlsxObject->fileName($filename);

        // Writing data to a file ......
//        $fileObject = $fileObject->header(['Item', 'Cost']);
//
//        $fileObject = $fileObject->data([
//            ['Rent', 1000],
//            ['Gas',  100],
//            ['Food', 300],
//            ['Gym',  50],
//        ]);

        $fileObject = $fileObject->header(array_values($header));

        $title = array_keys($header);

        $data = self::handleDataByTitle($title, $data);

        $fileObject = $fileObject->data($data);

        // Outptu
        $filePath = $fileObject->output();

        // Set Header
        header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        header('Content-Disposition: attachment;filename="' . $filename . '"');
        header('Content-Length: ' . filesize($filePath));
        header('Content-Transfer-Encoding: binary');
        header('Cache-Control: must-revalidate');
        header('Cache-Control: max-age=0');
        header('Pragma: public');

        ob_clean();
        flush();

        if (copy($filePath, 'php://output') === false) {
            // Throw exception
        }

        // Delete temporary file
        @unlink($filePath);
    }
License:  CC BY 4.0