用phpexcel导入导出文件

本文介绍了一个基于ThinkPHP框架的订单数据导入导出功能实现方案,包括使用PHPExcel进行Excel文件读写,以及如何处理数据导入验证和导出格式化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
namespace app\data\controller;

use cmf\controller\AdminBaseController;
use think\Db;
use think\Loader;

header("Content-type: text/html; charset=utf-8");
//订单数据导入导出类
class ExcelController extends AdminBaseController
{

    //导出excel
    public function export_excel()
    {
        Loader::import('Classes.PHPExcel');
        Loader::import('Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
        $PHPExcel = new \PHPExcel();

        $PHPSheet = $PHPExcel->getActiveSheet();
        $letter = array('A','B','C','D');

        //表头数组

        $tableheader = array(
            'MAC地址','手机品牌','采集地址','采集时间'
        );

        //填充表头信息
        for($i = 0;$i < count($tableheader);$i++) {

            $PHPSheet->setCellValue("$letter[$i]1","$tableheader[$i]");

        }
        $where = array();
        //获取当前账号id()
        $id = $this->user_id;
        $datas = $this->request->param();
        $res = $this->validate($datas,"Index.search");
        if($res){

            $st_time = strtotime(input('st_time'));//下单开始时间
            $end_time = strtotime(input('end_time'));//下单结束时间
            $device_name = input('device_name');//设备名称
            $wifi_name = input('wifi_name'); //wifi名称
            $brand_name = input("brand_name");//手机品牌名称
            $unknow   = $datas['unknow'] ?? '1';     //品牌是否为未知数据

//            dump($device_info);
            $this->assign(array(
                'st_time' => input('st_time'),
                'end_time' => input('end_time'),
                'device_name' => $device_name,
                'wifi_name' => $wifi_name,
                'brand_name' => $brand_name,
                'unknow'  => $unknow,
            ));

            //时间查询
            // //-------------------------------------
            if($st_time && !$end_time){
                //在xx时间后
                $where['createtime'] = array('egt',$st_time);
            }elseif($end_time && !$st_time){
                //在xx时间前
                $where['createtime'] = array('elt',$end_time);
            }elseif($end_time && $st_time){
                //在xx-yy时间段
                if($st_time>$end_time){
                    $this->error("开始时间不能大于结束时间",url("data/index/index"));
                }else{
                    $ends_time=strtotime('+1 day',$end_time);
                    $where['createtime'] = array('between',array($st_time,$ends_time));
                }
            }
            // //-------------------------------
            //设备名称
            if(!empty($device_name)){
                $where['u_id'] = array('=',$device_name);
            }

            //wifi名称
            if(!empty($wifi_name)){
                $where['wifi_name'] = array('like',"%$wifi_name%");
            }

            //手机品牌名称
            if(!empty($brand_name)){
                $where['phone_brand'] = array('like',"%$brand_name%");
            }

            //unknow数据表
            if($unknow != 1){
                $unkn = '_unknow';
            }else{
                $unkn = '';
            }

        }else{
            $this->error($res);
        }
//        //判断权限;
        if($id != '1'){
            //不是管理员  只能获取自己的数据
            $where['user_id'] = array('=',$id);
        }

        //查询数据集
        //------------------------------------
        //分表规则 : user_id的尾数与表名数字一致
        $table = 'mac_data.cmf_mac_data_'.substr($this->user_id,-1).$unkn;
        $data = Db::table($table)
            ->where($where)
            ->where('delete_time','null')
            ->order('createtime desc')
            ->field('mac_info,phone_brand,addr,FROM_UNIXTIME(createtime,"%Y-%m-%d %H:%i:%S")as time')
            ->select();
        //填充表格信息
        $count=count($data)+1;
        for ($i = 2;$i <= $count;$i++) {
            //i=行数    j=排数
            $j = 0;
            foreach ($data[$i - 2] as $key=>$value) {
                //$i=2 是因为数据从第二排开始
                $PHPSheet->setCellValue("$letter[$j]$i","$value");
                $j++;
            }

        }

        $PHPSheet->setTitle("data"); //给当前活动sheet设置名称
        $PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel,"Excel2007");
        header('Content-Disposition: attachment;filename="导出数据.xlsx"');
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        $PHPWriter->save("php://output"); //表示在$path路径下面生成demo.xlsx文件
    }

    //导入界面
    public function addexcel()
    {
        return $this->fetch('index/addexcel');
    }

    //导入excel
    public function inserExcel()
    {
        Loader::import('Classes.PHPExcel');
        Loader::import('Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
        Loader::import('Classes.PHPExcel.Reader.Excel7');
        //获取表单上传文件
        $file = request()->file('file');
        if(empty($file)){
            $this->error('未检测到上传文件!');
        }
        $info = $file->validate(['size'=>2097152,'ext'=>'csv'])->move(ROOT_PATH . 'public' . DS . 'upload/excel');
        if(!$info){
            $this->error($file->getError());
        }
        //施展终极空间忍术·移动文件
        $exclePath = '/excel/'.$info->getSaveName();  //获取文件名

        $file_name = ROOT_PATH . 'public' . DS . 'upload' . DS . $exclePath;   //上传文件的地址
        $objReader =\PHPExcel_IOFactory::createReader('CSV')->setInputEncoding('GBK');
        $obj_PHPExcel =$objReader->load($file_name);  //加载文件内容,编码utf-8
        $excel_array=$obj_PHPExcel->getsheet(0)->toArray();   //转换为数组格式
        array_shift($excel_array);  //删除第一个数组(标题);
        $city = [];
        $num = 0;
        $table = 'mac_data.cmf_mac_phones';
        //处理内容
        $insert_data = array();
        foreach($excel_array as $k=>$v) {
            if($v[2] == null){
                continue; //过滤空数据
            }
            $are = explode(' ',$v[5]);
            $city = $are[1] ?? $are[0];
            $province = $are[0];
            $phone = explode(' ',$v[2]);
            if(count($phone)>1){
                foreach($phone as $val){
                    $insert_data[] = array(
                        'name' => $v[1],
                        'mobile' => $val,
                        'area' => $v[4],
                        'coord' => $v[8],
                        'city' => $city,
                        'search' => $v[6],
                        'province' =>$province,
                    );
                    $num++;
                }
            }else{
                $insert_data[] = array(
                    'name' => $v[1],
                    'mobile' => $v[2],
                    'area' => $v[4],
                    'coord' => $v[8],
                    'city' => $city,
                    'search' => $v[6],
                    'province' =>$province,
                );
                $num++;
            }
        }
        //dump($insert_data);die;
        $zxc = Db::table($table)->fetchSql(true)->insertAll($insert_data,true);
        if(!$zxc){
            $this->error('导入失败');
        }
        trace($zxc);
        $this->success('共成功导入'.$num ."条数据!");
    }
    //导入模板
    public function demo()
    {

        $myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
        $txt = "Mickey Mouse\n";
        fwrite($myfile, $txt);
        $txt = "Minnie Mouse\n";
        fwrite($myfile, $txt);
        fclose($myfile);
        die;
        Loader::import('Classes.PHPExcel');
        Loader::import('Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
        $PHPExcel = new \PHPExcel();

        $PHPSheet = $PHPExcel->getActiveSheet();
        $letter = array('A','B','C','D');

        //表头数组

        $tableheader = array(
            '订单编号','物流公司','物流单号','支持物流(顺丰速运,百世快递,中通快递,申通快递,圆通速递,韵达速递,邮政快递包裹,MS,天天快递,京东物流,优速快递,德邦快递,快捷快递,宅急送,TNT快递)'
        );
        //填充表头信息

        for($i = 0;$i < count($tableheader);$i++) {
            $PHPSheet->setCellValue("$letter[$i]1","$tableheader[$i]");
        }
        $PHPExcel->getActiveSheet()->getStyle('A')->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
        $PHPExcel->getActiveSheet()->getStyle('C')->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);

        $data = array(
            '10000000000XXXX','圆通速递','XXXXXXXXXXX'
        );

        $j = 0;
        foreach ($data as $value) {
            $PHPSheet->setCellValue("$letter[$j]2","$value");

            $j++;

        }
        $PHPSheet->setTitle("批量发货模板"); //给当前活动sheet设置名称
        $PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel,"Excel2007");
        header('Content-Disposition: attachment;filename="demo.xlsx"');
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        $PHPWriter->save("php://output"); //表示在$path路径下面生成demo.xlsx文件
    }

}
【基于QT的调色板】是一个使用Qt框架开发的色彩选择工具,类似于Windows操作系统中常见的颜色选取器。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备,支持C++和QML语言。这个调色板功能提供了横竖两种渐变模式,用户可以方便地选取所需的颜色值。 在Qt中,调色板(QPalette)是一个关键的类,用于管理应用程序的视觉样式。QPalette包含了一系列的颜色角色,如背景色、前景色、文本色、高亮色等,这些颜色可以根据用户的系统设置或应用程序的需求进行定制。通过自定义QPalette,开发者可以创建具有独特视觉风格的应用程序。 该调色板功能可能使用了QColorDialog,这是一个标准的Qt对话框,允许用户选择颜色。QColorDialog提供了一种简单的方式来获取用户的颜色选择,通常包括一个调色板界面,用户可以通过滑动或点击来选择RGB、HSV或其他色彩模型中的颜色。 横渐变取色可能通过QGradient实现,QGradient允许开发者创建线性或径向的色彩渐变。线性渐变(QLinearGradient)沿直线从一个点到另一个点过渡颜色,而径向渐变(QRadialGradient)则以圆心为中心向外扩散颜色。在调色板中,用户可能可以通过滑动条或鼠标拖动来改变渐变的位置,从而选取不同位置的颜色。 竖渐变取色则可能是通过调整QGradient的方向来实现的,将原本水平的渐变方向改为垂直。这种设计可以提供另一种方式来探索颜色空间,使得选取颜色更为直观和便捷。 在【colorpanelhsb】这个文件名中,我们可以推测这是与HSB(色相、饱和度、亮度)色彩模型相关的代码或资源。HSB模型是另一种常见且直观的颜色表示方式,与RGB或CMYK模型不同,它以人的感知为基础,更容易理解。在这个调色板中,用户可能可以通过调整H、S、B三个参数来选取所需的颜色。 基于QT的调色板是一个利用Qt框架和其提供的色彩管理工具,如QPalette、QColorDialog、QGradient等,构建的交互式颜色选择组件。它不仅提供了横竖渐变的色彩选取方式,还可能支持HSB色彩模型,使得用户在开发图形用户界面时能更加灵活和精准地控制色彩。
标题基于Spring Boot的二手物品交易网站系统研究AI更换标题第1章引言阐述基于Spring Boot开发二手物品交易网站的研究背景、意义、现状及本文方法与创新点。1.1研究背景与意义介绍二手物品交易的市场需求和Spring Boot技术的适用性。1.2国内外研究现状概述当前二手物品交易网站的发展现状和趋势。1.3论文方法与创新点说明本文采用的研究方法和在系统设计中的创新之处。第2章相关理论与技术介绍开发二手物品交易网站所涉及的相关理论和关键技术。2.1Spring Boot框架解释Spring Boot的核心概念和主要特性。2.2数据库技术讨论适用的数据库技术及其在系统中的角色。2.3前端技术阐述与后端配合的前端技术及其在系统中的应用。第3章系统需求分析详细分析二手物品交易网站系统的功能需求和性能需求。3.1功能需求列举系统应实现的主要功能模块。3.2性能需求明确系统应满足的性能指标和安全性要求。第4章系统设计与实现具体描述基于Spring Boot的二手物品交易网站系统的设计和实现过程。4.1系统架构设计给出系统的整体架构设计和各模块间的交互方式。4.2数据库设计详细阐述数据库的结构设计和数据操作流程。4.3界面设计与实现介绍系统的界面设计和用户交互的实现细节。第5章系统测试与优化说明对系统进行测试的方法和性能优化的措施。5.1测试方法与步骤测试环境的搭建、测试数据的准备及测试流程。5.2测试结果分析对测试结果进行详细分析,验证系统是否满足需求。5.3性能优化措施提出针对系统性能瓶颈的优化建议和实施方案。第6章结论与展望总结研究成果,并展望未来可能的研究方向和改进空间。6.1研究结论概括本文基于Spring Boot开发二手物品交易网站的主要发现和成果。6.2展望与改进讨论未来可能的系统改进方向和新的功能拓展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值