Browse Source

身份证等较长的数字类型在excel中呈现为文本格式,避免被显示为科学计数法

sugangqiang 2 years ago
parent
commit
c769b5aad4
2 changed files with 40 additions and 19 deletions
  1. 1 1
      app/admin/controller/Talent.php
  2. 39 18
      app/common.php

+ 1 - 1
app/admin/controller/Talent.php

@@ -1780,7 +1780,7 @@ class Talent extends AdminController {
             $datas[] = $data;
         }
         if ($datas) {
-            export($columns, $datas);
+            export($columns, $datas, "人才审核列表导出");
             exit();
         }
         echo "<script>parent.layer.alert('没有可以导出的数据');window.history.go(-1);</script>";

+ 39 - 18
app/common.php

@@ -116,8 +116,8 @@ function export($columns, $rows, $filename = "jjrcw", $settings = [], $sheetname
     //设置正文内容
     for ($i = 0; $i < $rowCount; $i++) {
         for ($n = 0; $n < $colCount; $n++) {
-            if (is_numeric($rows[$i][$n]) && strlen($rows[$i][$n]) > 17) {
-                //超过17位的数字转成文本方以免被转化为科学数
+            if (is_numeric($rows[$i][$n]) && strlen($rows[$i][$n]) > 11) {
+                //超过11位的数字转成文本方以免被转化为科学数
                 $objPHPExcel->setCellValueExplicit(getExcelColumnByIndex($n) . ($rowStartLine + $i), $rows[$i][$n], $datatype::TYPE_STRING);
             } else {
                 $objPHPExcel->setCellValue(getExcelColumnByIndex($n) . ($rowStartLine + $i), $rows[$i][$n]);
@@ -127,7 +127,8 @@ function export($columns, $rows, $filename = "jjrcw", $settings = [], $sheetname
     $objPHPExcel->getDefaultColumnDimension()->setWidth(16); //默认列宽
     $objPHPExcel->getDefaultRowDimension()->setRowHeight(30); //默认列高
     //样式设置
-    $settings = $settings ?: getCommonExcelSetting($colCount, $rowCount);
+    $defaultSetting = getCommonExcelSetting($colCount, $rowCount);
+    $settings = $settings ? array_merge($defaultSetting, $settings) : $defaultSetting;
     foreach ($settings as $type => $cfg) {
         switch ($type) {
             case "width":
@@ -199,11 +200,29 @@ function export($columns, $rows, $filename = "jjrcw", $settings = [], $sheetname
                     $objPHPExcel->getStyle($cfg[$i][0])->getFont()->getColor()->setARGB($cfg[$i][1]);
                 }
                 break;
+            case "format":
+                for ($i = 0; $i < count($cfg); $i++) {
+                    switch ($cfg[$i][0]) {
+                        case "string":
+                            $objPHPExcel->getStyle($cfg[$i][1])->getNumberFormat()->setFormatCode(PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
+                            break;
+                        case "usd":
+                            $objPHPExcel->getStyle($cfg[$i][1])->getNumberFormat()->setFormatCode(PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_CURRENCY_USD_SIMPLE);
+                            break;
+                        default:
+                            $objPHPExcel->getStyle($cfg[$i][1])->getNumberFormat()->setFormatCode(PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
+                            break;
+                    }
+                }
+                break;
             case "wrap":
                 for ($i = 0; $i < count($cfg); $i++) {
                     $objPHPExcel->getStyle($cfg[$i])->getAlignment()->setWrapText(true); //cellvalue包含\n设为自动换行
                 }
                 break;
+            case "scale":
+                $objPHPExcel->getSheetView()->setZoomScale($cfg ?: 100);
+                break;
         }
     }
 
@@ -477,27 +496,29 @@ function getJsonConfig($filepath, $field) {
     }
     return null;
 }
+
 //加密前补齐
-function mystr_pad($data,$len = 16){
+function mystr_pad($data, $len = 16) {
     $n = $len - strlen($data) % $len;
     $data = $data . str_repeat(chr($n), $n);
     return $data;
 }
+
 // 解密后去掉补齐
-function mystr_unpad($data){
-    $n = ord(substr($data,-1));
+function mystr_unpad($data) {
+    $n = ord(substr($data, -1));
     return substr($data, 0, -$n);
 }
 
 //计算两个日期的时间差
-function diffDate($date1,$date2){
+function diffDate($date1, $date2) {
     if (strtotime($date1) > strtotime($date2)) {
         $ymd = $date2;
         $date2 = $date1;
         $date1 = $ymd;
     }
-    $date1 = date('Y-m-d',strtotime($date1));
-    $date2 = date('Y-m-d',strtotime($date2));
+    $date1 = date('Y-m-d', strtotime($date1));
+    $date2 = date('Y-m-d', strtotime($date2));
     list($y1, $m1, $d1) = explode('-', $date1);
     list($y2, $m2, $d2) = explode('-', $date2);
     $y = $m = $d = $_m = 0;
@@ -512,7 +533,7 @@ function diffDate($date1,$date2){
     return array($y, $m, $d);
 }
 
-function formatDateByMonth($date1,$date2,$data = []){
+function formatDateByMonth($date1, $date2, $data = []) {
     if (strtotime($date1) > strtotime($date2)) {
         $ymd = $date2;
         $date2 = $date1;
@@ -521,12 +542,12 @@ function formatDateByMonth($date1,$date2,$data = []){
     $sTime = strtotime(date('Y-m-01', strtotime($date1)));
     $eTime = strtotime(date('Y-m-01', strtotime($date2)));
     $month_arr = [];
-    for($sTime; $sTime <= $eTime;  $sTime = strtotime('+1 month', $sTime)){
-        $month_arr[date('Ym',$sTime)] = date('Y-m',$sTime); // 取得递增月;
+    for ($sTime; $sTime <= $eTime; $sTime = strtotime('+1 month', $sTime)) {
+        $month_arr[date('Ym', $sTime)] = date('Y-m', $sTime); // 取得递增月;
     }
-    if(is_array($data) && count($data) > 0){
+    if (is_array($data) && count($data) > 0) {
         foreach ($data as $item) {
-            if(array_key_exists($item['aae003'],$month_arr)){
+            if (array_key_exists($item['aae003'], $month_arr)) {
                 $month_arr[$item['aae003']] .= "<span style='color:green'>已缴费</span>";
             }
         }
@@ -534,14 +555,14 @@ function formatDateByMonth($date1,$date2,$data = []){
     return $month_arr;
 }
 
-function proSearch($str,$arr){
+function proSearch($str, $arr) {
 
     $match_res = [];
-    array_filter($arr,function($arr) use ($str,&$match_res){
-        if(stripos($arr['value'],$str) !== false){
+    array_filter($arr, function($arr) use ($str, &$match_res) {
+        if (stripos($arr['value'], $str) !== false) {
             $match_res[] = $arr['value'];
             return true;
-        }else{
+        } else {
             return false;
         }
     });