首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何使用Webman框架实现Excel导入导出?

如何使用Webman框架实现Excel导入导出?

作者头像
Tinywan
发布2023-11-13 15:47:55
发布2023-11-13 15:47:55
1.1K00
代码可运行
举报
文章被收录于专栏:开源技术小栈开源技术小栈
运行总次数:0
代码可运行

介绍

本文会介绍Webman框架中使用PhpSpreadsheet操作Excel,供大家参考。

1、简介

PhpSpreadsheet 是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式 PhpSpreadsheet 提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到。

2、安装

使用 composer 安装,在项目根目录下执行下面命令,即可安装。在webman框架中,可以使用composer安装phpoffice/phpspreadsheet库,实现Excel处理功能。在命令行中执行以下命令进行安装:

代码语言:javascript
代码运行次数:0
运行
复制
composer require phpoffice/phpspreadsheet

Excel导入

代码语言:javascript
代码运行次数:0
运行
复制
<?php
/**
 * @desc Excel 导入操作
 * @author Tinywan(ShaoBo Wan)
 * @email 756684177@qq.com
 * @date 2023/11/10 23:27
 */

declare(strict_types=1);

namespace app\console\controller;


use PhpOffice\PhpSpreadsheet\Exception;
use support\Request;

class Excel
{
    /**
     * @desc import
     * @param Request $request
     * @throws Exception
     * @throws \Exception
     * @author Tinywan(ShaoBo Wan)
     */
    public function import(Request $request)
    {
        $file = $request->file('file');
        if (empty($file) || !$file->isValid()) {
            throw new \Exception('无效的文件');
        }

        if (!in_array($file->getUploadExtension(), ['xlsx', 'pptx', 'docx', 'pdf'], true)) {
            throw new \Exception('上传文件格式不支持');
        }

        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
        if (false === $reader->canRead($file->getRealPath())) {
            throw new \Exception('非法的Excel文件格式(如:强制转换文件后缀xls为xlsx)');
        }

        $excel = $reader->load($file->getRealPath());
        $sheelList = $excel->getSheet(0)->toArray();
        $importSheelList = array_slice($sheelList, 2);
        if (empty($importSheelList)) {
            throw new \Exception('数据为空,请填写后重新上传');
        }
        $importData = [];
        foreach ($importSheelList as $sheel) {
            array_push($importData, [
                'user_id' => (string)$sheel[0],
                'username' => (string)$sheel[1],
                'create_time' => time(),
            ]);
        }
        var_dump($importData);
    }
}

Excel导出

代码语言:javascript
代码运行次数:0
运行
复制
<?php
/**
 * @desc Excel 导出操作
 * @author Tinywan(ShaoBo Wan)
 * @email 756684177@qq.com
 * @date 2023/11/10 23:27
 */

declare(strict_types=1);

namespace app\console\controller;


use PhpOffice\PhpSpreadsheet\Cell\DataType;
use support\Request;
use support\Response;

class Excel
{
    /**
     * @desc 导出Excel
     * @param Request $request
     * @return Response
     * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
     * @author Tinywan(ShaoBo Wan)
     */
    public function import(Request $request)
    {
        $exportList = UserModel::where(['channel_id' => 10086])->order('id desc')->select();
        if ($exportList->isEmpty()) {
            throw new \Exception('暂无数据');
        }

        $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        // 设置默认行高
        $sheet->getDefaultRowDimension()->setRowHeight(18);
        $sheet->getStyle("A1:J1")
            ->getFont()
            ->setBold(true);
        $sheet->setCellValue('A1', '用户账号');
        $sheet->setCellValue('B1', '姓名');
        $sheet->setCellValue('C1', '观看时长');
        $sheet->setCellValue('D1', '开始时间');
        $sheet->setCellValue('E1', '结束时间');
        $sheet->setCellValue('F1', '观看IP');
        $sheet->setCellValue('G1', '观看地区');
        $sheet->setCellValue('H1', '观看终端(版本号)');
        $sheet->setCellValue('I1', '事件');
        $sheet->setCellValue('J1', '场次ID');
        $sheet->getColumnDimension('A')->setWidth(15);
        $sheet->getColumnDimension('B')->setWidth(10);
        $sheet->getColumnDimension('C')->setWidth(10);
        $sheet->getColumnDimension('D')->setWidth(20);
        $sheet->getColumnDimension('E')->setWidth(20);
        $sheet->getColumnDimension('F')->setWidth(15);
        $sheet->getColumnDimension('G')->setWidth(20);
        $sheet->getColumnDimension('H')->setWidth(25);
        $sheet->getColumnDimension('I')->setWidth(20);
        $sheet->getColumnDimension('J')->setWidth(40);

        foreach ($exportList as $key => $user) {
            $sheet->setCellValueExplicit("A" . ($key + 2), $user['user_id'], DataType::TYPE_STRING)
                ->setCellValueExplicit('B' . ($key + 2), $user['username'], DataType::TYPE_STRING)
                ->setCellValueExplicit('C' . ($key + 2), gmstrftime('%H:%M:%S', $user['duration']), DataType::TYPE_STRING)
                ->setCellValueExplicit('D' . ($key + 2), $user['create_time'], DataType::TYPE_STRING)
                ->setCellValueExplicit('E' . ($key + 2), $user['update_time'], DataType::TYPE_STRING)
                ->setCellValueExplicit('F' . ($key + 2), $user['client_ip'], DataType::TYPE_STRING)
                ->setCellValueExplicit('G' . ($key + 2), $user['region'], DataType::TYPE_STRING)
                ->setCellValueExplicit('H' . ($key + 2), $user['browser'], DataType::TYPE_STRING)
                ->setCellValueExplicit('I' . ($key + 2), $user['event'], DataType::TYPE_STRING)
                ->setCellValueExplicit('J' . ($key + 2), $user['session_id'], DataType::TYPE_STRING);
        }

        $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
        ob_start();
        $writer->save("php://output");
        $xlsData = ob_get_contents();
        ob_end_clean();
        return json([
            'filename' => '[开源技术]导出直播观看记录.xlsx',
            'file' => "data:application/vnd.ms-excel;base64," . base64_encode($xlsData),
        ]);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 1、简介
    • 2、安装
  • Excel导入
  • Excel导出
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档