[BD] Excel文件导出

37 阅读1分钟
1.在封装API中定义下载链接

web\src\api\backend\adminapi.ts

// 获取用户列表(用于选择上级用户)
export function download(type: any) {
    const adminInfo = useAdminInfo()
    let url = getUrl() + '/admin/api/download' + '?server=1' + '&type=' + type + '&batoken=' +  adminInfo.getToken()
    return url;
}
2.在列表页中点击下载
<el-button class="export" @click="exportGoods">导出商品</el-button>

<script setup lang="ts">
import { download } from '/@/api/backend/adminapi'
const exportGoods = () => {
    let url = download("Goods")
    window.location.href = url
    // console.log(url);
}
</script>
3.控制器方法 (报错此网页暂时无法连接,或者已转移到新的.., 使用第四个)

这里使用的是spreadsheet包 app\admin\controller\Api.php

    // 下载
    public function download()
    {
        $type = request()->get('type');
        // $worksheet->setTitle($taskName);

        // 直接下载
        ob_end_clean();
        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");

        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $sheet->setCellValue('A1', 'Hello World !');
        $writer = new Xlsx($spreadsheet);
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="hello world.xlsx"');
        header('Cache-Control: max-age=0');
        $writer->save('php://output');
    }
4.新的导出函数
/**
 * 新的导出
 */
public function download()
{
    $spreadsheet = new Spreadsheet();
    $worksheet   = $spreadsheet->getActiveSheet();

    // 直接下载
    ob_end_clean();
    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");

    $taskName        =  'demo01.xlsx';
    $encodedFilename = urlencode($taskName);

    $ua              = $_SERVER["HTTP_USER_AGENT"];
    if (preg_match("/MSIE/", $ua)) {
        header('Content-Disposition: attachment; filename="' . $encodedFilename . '"');
    } else if (preg_match("/Firefox/", $ua)) {
        header('Content-Disposition: attachment; filename*="utf8''' . $taskName . '"');
    } else {
        header('Content-Disposition: attachment; filename="' . $taskName . '"');
    }
    header("Content-Transfer-Encoding:binary");
    header('Cache-Control: max-age=0');

    $writer = new Xlsx($spreadsheet);
    $writer->save('php://output');
    $spreadsheet->disconnectWorksheets();
}