vali 6 yıl önce
ebeveyn
işleme
31ffe98b86

+ 7 - 3
application/admin/controller/Report.php

@@ -8,6 +8,8 @@ use app\admin\model\Users as Usersmodel;
 use app\admin\model\Groups as GroupsModel;
 use app\admin\model\Servicetimelog as ServicetimelogModel;
 use app\admin\model\Kfstatetimes as KfstatetimesModel;
+use app\admin\model\Office;
+
 
 /**
  * 报表类
@@ -145,9 +147,9 @@ class Report extends Base
                 $retall = $this->reportDataFormat($ret1, $ret2, $uidarr['objs'], $zoneArray1, $limit, $offset);
                 return json($retall);
             } else {
-                $title = ['账号', '姓名', '日期', '首次登陆时间', '最后登出时间', '登陆时长', '休息时长', '隐身时长', '在线占比', '休息占比', '', '隐身占比','xx','bb'];
+                $title = ['账号', '姓名', '日期', '首次登陆时间', '最后登出时间', '登陆时长', '休息时长', '隐身时长', '在线占比', '休息占比', '', '隐身占比'];
                 $retall = $this->reportDataFormat($ret1, $ret2, $uidarr['objs'], $zoneArray1, $limit, $offset, true);
-                exportExcel($title, $retall);
+                (new Office())->outdata('数据导出', $retall, $title, ['account', 'uname', 'day', 'of0', 'of1', 'all', '1', '2', '3', 's1p', 's2p', 's3p']);
                 return true;
             }
         }
@@ -183,7 +185,7 @@ class Report extends Base
         }
 
         usort($all_last, function ($a, $b) {
-            return $a == $b ? 0 : ($a > $b ? 1 : -1);
+            return $a['uid'] == $b['uid'] ? 0 : ($a['uid'] > $b['uid'] ? 1 : -1);
         });
 
         foreach ($all_last as $key => $val) {
@@ -193,6 +195,8 @@ class Report extends Base
             $all_last[$key]['s1p'] = perDisplay($all_last[$key]['s1p']);
             $all_last[$key]['s2p'] = perDisplay($all_last[$key]['s2p']);
             $all_last[$key]['s3p'] = perDisplay($all_last[$key]['s3p']);
+            unset($all_last[$key]['uid']);
+            unset($all_last[$key]['0']);
         }
 
         //导出数据

+ 72 - 0
application/admin/model/Office.php

@@ -0,0 +1,72 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/7/15
+ * Time: 12:27
+ */
+
+namespace App\admin\model;
+
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
+
+class Office
+{
+
+    /**
+     * 导出excel表
+     * $data:要导出excel表的数据,接受一个二维数组
+     * $name:excel表的表名
+     * $head:excel表的表头,接受一个一维数组
+     * $key:$data中对应表头的键的数组,接受一个一维数组
+     * 备注:此函数缺点是,表头(对应列数)不能超过26;
+     *循环不够灵活,一个单元格中不方便存放两个数据库字段的值
+     */
+
+    public function outdata($name = '测试表', $data = [], $head = [], $keys = [])
+    {
+        $count = count($head);  //计算表头数量
+
+        $spreadsheet = new Spreadsheet();
+        $sheet = $spreadsheet->getActiveSheet();
+
+        for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始,循环设置表头:
+            $sheet->setCellValue(strtoupper(chr($i)) . '1', $head[$i - 65]);
+        }
+
+        /*--------------开始从数据库提取信息插入Excel表中------------------*/
+
+        foreach ($data as $key => $item) {             //循环设置单元格:
+            //$key+2,因为第一行是表头,所以写到表格时   从第二行开始写
+
+            for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始:
+                $sheet->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys[$i - 65]]);
+                $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20); //固定列宽
+            }
+        }
+
+        header('Content-Type: application/vnd.ms-excel');
+        header('Content-Disposition: attachment;filename="' . $name . '.xlsx"');
+        header('Cache-Control: max-age=0');
+        $writer = new Xlsx($spreadsheet);
+        $writer->save('php://output');
+
+        //删除清空:
+        $spreadsheet->disconnectWorksheets();
+        unset($spreadsheet);
+        exit;
+    }
+
+}
+/**
+ *
+$excel = new Office();
+//设置表头:
+$head = ['订单编号', '商品总数', '收货人', '联系电话', '收货地址'];
+//数据中对应的字段,用于读取相应数据:
+$keys = ['order_sn', 'num', 'consignee', 'phone', 'detail'];
+$excel->outdata('订单表', $orders, $head, $keys);
+
+ *
+ * */

+ 14 - 57
application/common.php

@@ -9,6 +9,20 @@
 // | Author: 流年 <liu21st@gmail.com>
 // +----------------------------------------------------------------------
 
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
+use PhpOffice\PhpSpreadsheet\Reader\Xls;
+use PhpOffice\PhpSpreadsheet\IOFactory;
+use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
+use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
+use PhpOffice\PhpSpreadsheet\Cell\DataType;
+use PhpOffice\PhpSpreadsheet\Style\Fill;
+use PhpOffice\PhpSpreadsheet\Style\Color;
+use PhpOffice\PhpSpreadsheet\Style\Alignment;
+use PhpOffice\PhpSpreadsheet\Style\Border;
+use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
+
+
 // 应用公共文件
 /**
  * 删除目录以及其下的文件
@@ -105,60 +119,3 @@ function perDisplay($dit, $xiaos = 2)
     return floatPointDigit(floor(100 * $dit), $xiaos) . '%';
 }
 
-/**
- * 导出excel表格
- *
- * @param   array $columName 第一行的列名称
- * @param   array $list 二维数组
- * @param   string $setTitle sheet名称
- * @return
- * @author  Tggui <tggui@vip.qq.com>
- */
-function exportExcel($columName, $list, $setTitle = 'Sheet1', $fileName = 'demo')
-{
-    if (empty($columName) || empty($list)) {
-        return '列名或者内容不能为空';
-    }
-
-    if (count($list[0]) != count($columName)) {
-        return '列名跟数据的列不一致';
-    }
-
-    //实例化PHPExcel类
-    $PHPExcel = new PHPExcel();
-    //获得当前sheet对象
-    $PHPSheet = $PHPExcel->getActiveSheet();
-    //定义sheet名称
-    $PHPSheet->setTitle($setTitle);
-
-    //excel的列 这么多够用了吧?不够自个加 AA AB AC ……
-    $letter = [
-        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
-        'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
-    ];
-    //把列名写入第1行 A1 B1 C1 ...
-    for ($i = 0; $i < count($list[0]); $i++) {
-        $PHPSheet->setCellValue("$letter[$i]1", "$columName[$i]");
-    }
-    //内容第2行开始
-    foreach ($list as $key => $val) {
-        foreach (array_values($val) as $key2 => $val2) {
-            $PHPSheet->setCellValue($letter[$key2] . ($key + 2), $val2);
-        }
-    }
-
-
-    //生成2007版本的xlsx
-    $PHPWriter = PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel2007');
-    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
-    header('Content-Disposition: attachment;filename=' . $fileName . '.xlsx');
-    header('Cache-Control: max-age=0');
-    $PHPWriter->save("php://output");
-}
-
-/*
- * 使用方法
-$titlname    =    ['订单号','消费用户','订单金额','订单数量','支付状态','订单时间'];
-exportExcel($titlname,'你的二维数组数据','Sheet1','文件名称');
-*/
-