日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解如何實(shí)現(xiàn)phpoffice的excel導(dǎo)入功能解耦

瀏覽:51日期:2022-06-14 10:53:23
目錄前言:沖突:解決方法:編碼:前言:

在業(yè)務(wù)中開(kāi)發(fā)中,表格的導(dǎo)入導(dǎo)出功能很常見(jiàn)。但是這里主要是使用PhpOffice類(lèi)庫(kù)介紹實(shí)現(xiàn)導(dǎo)入表格數(shù)據(jù)的功能。

沖突:

大部分的導(dǎo)入功能,就是通過(guò)點(diǎn)擊按鈕上傳一張表格,然后后臺(tái)讀取表格數(shù)據(jù)根據(jù)業(yè)務(wù)整理后直接插入到數(shù)據(jù)庫(kù),最后再返回給前端。但是如果表格數(shù)據(jù)龐大,業(yè)務(wù)邏輯復(fù)雜的時(shí)候,就會(huì)導(dǎo)致導(dǎo)入那一塊很臃腫不好維護(hù)。

解決方法:

處理方式是把導(dǎo)入與業(yè)務(wù)數(shù)據(jù)插入分離,所以在二者之間添加一個(gè)隊(duì)列就可以了。導(dǎo)入只負(fù)責(zé)將表格數(shù)據(jù)存入隊(duì)列。業(yè)務(wù)部分可以是單獨(dú)的系統(tǒng),最后就是消費(fèi)隊(duì)列中的數(shù)據(jù)了。這樣一來(lái),不但提升了導(dǎo)入速度,而且還讓導(dǎo)入與系統(tǒng)解耦,不會(huì)因?yàn)楫惓6绊懙狡渌麡I(yè)務(wù)。

編碼:

1.下載PhpOffice。

composer repuire phpoffice/phpspreadsheet

2.導(dǎo)入導(dǎo)出代碼。

<?phpnamespace app\common\helper;use PhpOffice\PhpSpreadsheet\Spreadsheet;use PhpOffice\PhpSpreadsheet\Writer\Xlsx;use PhpOffice\PhpSpreadsheet\IOFactory;use PhpOffice\PhpSpreadsheet\Cell\Coordinate;use think\Exception;class Excel{ // 導(dǎo)出 public function outPut($data, $columns, $table = '導(dǎo)出文件') {$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();// 設(shè)置第一欄的標(biāo)題foreach ($columns as $k => $v) { $sheet->setCellValue($k . '1', $v['title']);}//第二行起 設(shè)置內(nèi)容$baseRow = 2; //數(shù)據(jù)從N-1行開(kāi)始往下輸出 這里是避免頭信息被覆蓋foreach ($data as $key => $value) { foreach ($columns as $k1 => $v1) {$i = $key + $baseRow;$sheet->setCellValue($k1 . $i, $value[$v1['field']]); }}$writer = new Xlsx($spreadsheet);$filename = $table . date('Y-m-d', time()) . '_' . time() . '.xlsx';$writer->save('./excel/' . $filename);return '/excel/' . $filename; } // 導(dǎo)入 public function importExcel($file = '', $sheet = 0, $columnCnt = 0, &$options = []) {try { $file = iconv('utf-8', 'gb2312', $file); if (empty($file) OR !file_exists($file)) {throw new \Exception('文件不存在!'); } $objRead = IOFactory::createReader('Xlsx'); if (!$objRead->canRead($file)) {$objRead = IOFactory::createReader('Xls');if (!$objRead->canRead($file)) { throw new \Exception('只支持導(dǎo)入Excel文件!');} } /* 如果不需要獲取特殊操作,則只讀內(nèi)容,可以大幅度提升讀取Excel效率 */ empty($options) && $objRead->setReadDataOnly(true); /* 建立excel對(duì)象 */ $obj = $objRead->load($file); /* 獲取指定的sheet表 */ $currSheet = $obj->getSheet($sheet); //$currSheet = $obj->getSheetByName($sheet); // 根據(jù)名字 if (isset($options['mergeCells'])) {/* 讀取合并行列 */$options['mergeCells'] = $currSheet->getMergeCells(); } if (0 == $columnCnt) {/* 取得最大的列號(hào) */$columnH = $currSheet->getHighestColumn();/* 兼容原邏輯,循環(huán)時(shí)使用的是小于等于 */$columnCnt = Coordinate::columnIndexFromString($columnH); } /* 獲取總行數(shù) */ $rowCnt = $currSheet->getHighestRow(); $data = []; /* 讀取內(nèi)容 */ for ($_row = 1; $_row <= $rowCnt; $_row++) {$isNull = true;for ($_column = 1; $_column <= $columnCnt; $_column++) { $cellName = Coordinate::stringFromColumnIndex($_column); $cellId = $cellName . $_row; $cell = $currSheet->getCell($cellId); if (isset($options['format'])) {/* 獲取格式 */$format = $cell->getStyle()->getNumberFormat()->getFormatCode();/* 記錄格式 */$options['format'][$_row][$cellName] = $format; } if (isset($options['formula'])) {/* 獲取公式,公式均為=號(hào)開(kāi)頭數(shù)據(jù) */$formula = $currSheet->getCell($cellId)->getValue();if (0 === strpos($formula, '=')) { $options['formula'][$cellName . $_row] = $formula;} } if (isset($format) && 'm/d/yyyy' == $format) {/* 日期格式翻轉(zhuǎn)處理 */$cell->getStyle()->getNumberFormat()->setFormatCode('yyyy/mm/dd'); } $data[$_row][$cellName] = trim($currSheet->getCell($cellId)->getFormattedValue()); if (!empty($data[$_row][$cellName])) {$isNull = false; }}if ($isNull) { unset($data[$_row]);} } return $data;} catch (\Exception $e) { throw $e;} }}

3.抽取指定的字段格式化Excel數(shù)據(jù)。

return [ // 導(dǎo)入的表格標(biāo)題 'bidding' => ['stock_no' => '編號(hào)','price' => '價(jià)格','mobile' => '手機(jī)','nickname' => '姓名' ]];// 格式化指定列數(shù)據(jù)(默認(rèn)第一行表頭)public static function formattingCells(array $data, array $cellConfig){ $res = array_values($data); // 表頭 $header = $res[0]; $cellKeys = []; foreach ($header as $key => $value) {foreach ($cellConfig as $k => $v) { if ($value == $v) {$cellKeys[$key] = $k; }} } if (count($cellKeys) != count($cellConfig)) {throw new Exception('表格不完整'); } // 需要添加過(guò)濾 $temp = []; for ($i = 1; $i <= count($res) - 1; $i++) {foreach ($cellKeys as $m => $n) { $temp[$i][$n] = $res[$i][$m];} } return array_values($temp);}

4.導(dǎo)入部分,上傳接口。

// 導(dǎo)入表格,上傳接口public function importExcel(){ $upload_file = $_FILES['files']['tmp_name']; $input = $this->input; // ID $id = isset($input['id']) ? $input['id'] : 0; // 默認(rèn)取第一工作表 $excelData = (new Excel())->importExcel($upload_file, 0); // 取Excel字段 $config = config('excel_export.bidding'); $price_offer = Excel::formattingCells($excelData, $config); // 判斷每條記錄的手機(jī)和價(jià)格格式 // …… $jsonList = json_encode(compact('id', 'price_offer')); //$jsonList = json_encode($price_offer); // 入MQ $host = config('mq.host'); $options = config('mq.price_offer_import'); try {$mq = new ProductMQ($host, $options);$mq->publish($jsonList);$mq->close(); } catch (\Exception $e) {return $this->jsonData(200, $e->getMessage()); } // 入MQ return $this->jsonData(200, '導(dǎo)入成功');}

5.消費(fèi)業(yè)務(wù)邏輯。

以上就是詳解如何實(shí)現(xiàn)phpoffice的excel導(dǎo)入功能解耦的詳細(xì)內(nèi)容,更多關(guān)于phpoffice excel導(dǎo)入解耦的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久99久久人婷婷精品综合| 日韩精品三区四区| 国产另类在线| 久久精品xxxxx| 国产精品扒开腿做爽爽爽软件| 日韩有码av| 18国产精品| 欧美精品不卡| 精品国产亚洲日本| 久久男人天堂| 久久伦理在线| 国产一区导航| 亚洲人成网77777色在线播放 | 日韩精品一区二区三区免费观看| 国产成人免费精品| 91欧美国产| 成人精品天堂一区二区三区| 国产精品av久久久久久麻豆网| 亚洲精品91| 免费观看在线色综合| 日韩黄色免费网站| 久久久久伊人| 91精品久久久久久久久久不卡| 亚洲免费黄色| 日韩福利视频网| 久久99性xxx老妇胖精品| 国产一区二区三区不卡av| 日韩欧美综合| 麻豆亚洲精品| 日韩av一区二| 红杏一区二区三区| 久久精品1区| 日韩中文字幕一区二区三区| 欧美亚洲国产日韩| bbw在线视频| 蘑菇福利视频一区播放| 久久精品 人人爱| 久久久久久自在自线| 91久久中文| 国产精品久久久久久av公交车| 欧美三级网址| 亚洲+小说+欧美+激情+另类| 精品国产亚洲一区二区三区大结局| 久久国产成人午夜av影院宅| 久久最新视频| 国产激情一区| 免费观看不卡av| 国产欧美综合一区二区三区| 日本高清不卡一区二区三区视频| 亚洲图片久久| 国产精品久久久久久久久妇女| 亚洲精品电影| 老司机免费视频一区二区三区| 视频在线不卡免费观看| 久热精品在线| 日韩成人a**站| 亚洲精品影视| 天堂日韩电影| 欧美天堂在线| 亚洲精品**中文毛片| 午夜精品婷婷| 欧美经典一区| 欧美专区一区二区三区| 激情久久一区二区| 亚洲资源在线| 久久三级福利| 久久字幕精品一区| 亚洲永久精品唐人导航网址| 日韩中文首页| 国产精品chinese| 日韩精品一二三| 亚洲精品.com| 精品一区二区三区四区五区| 亚洲午夜国产成人| 日韩国产激情| 国产免费久久| 亚洲视频电影在线| 99久久婷婷| 精品伊人久久| 欧美一区二区三区久久| 在线视频精品| 国产一二在线播放| 久久精品99国产精品日本| 麻豆精品91| 欧美粗暴jizz性欧美20| 国产一区二区久久久久| 欧美在线精品一区| 久久av一区二区三区| 久久久夜精品| 国产精品毛片久久| 久久av影院| 青青青国产精品| 蜜臀av一区二区三区| 亚洲福利精品| 日本韩国欧美超级黄在线观看| 国产一区二区三区精品在线观看| 国产精品亚洲一区二区在线观看| 亚洲视频国产| 水蜜桃久久夜色精品一区的特点 | 九九九精品视频| 欧美日韩a区| 日韩中文字幕一区二区三区| 国产亚洲高清视频| 激情丁香综合| 久久国产免费| 欧美色图国产精品| 激情丁香综合| 精品中文一区| 久久一区二区三区喷水| 国产综合色区在线观看| 成人亚洲一区二区| 久久不卡日韩美女| 国产精品久一| 国产精品亚洲欧美| 欧美亚洲免费| 国产精品成人国产| 免费一级欧美在线观看视频| 国产精品sm| 久久尤物视频| 久久久久伊人| 激情不卡一区二区三区视频在线| 精品一区二区三区中文字幕视频| 精品视频一区二区三区四区五区 | 在线一区欧美| 99亚洲视频| 最新亚洲一区| 国产一级久久| 综合一区二区三区| 日韩av电影一区| 国产一卡不卡| 国产精品白丝一区二区三区| 久久字幕精品一区| 水蜜桃久久夜色精品一区| 岛国av在线网站| 涩涩av在线| 99精品一区| 国产精品婷婷| 日韩视频1区| 蜜桃精品视频| 欧美日韩视频网站| 不卡一区综合视频| 亚洲免费婷婷| 日韩影片在线观看| 国产精品自在| 国产精品久久久久久久久妇女| 久久久久久久久久久妇女| 亚洲在线一区| 日本aⅴ精品一区二区三区 | 国产精品扒开腿做爽爽爽软件| 成人亚洲一区二区| 蜜臀久久99精品久久一区二区| 蘑菇福利视频一区播放| 亚洲一级大片| 国产精品免费99久久久| 久草免费在线视频| 中文在线不卡| 久久狠狠亚洲综合| 老牛影视精品| 首页国产欧美久久| 欧美精品1区| 婷婷六月综合| 日韩精品一区二区三区免费视频| 国产欧美一区二区色老头| av资源中文在线| 蜜桃av一区二区三区电影| 国产精品网在线观看| 亚洲成人va| 首页欧美精品中文字幕| 久久伊人亚洲| 在线亚洲国产精品网站| 国产日韩中文在线中文字幕| 中国字幕a在线看韩国电影| 99在线精品视频在线观看| 国产探花一区| 国产99精品一区| 日韩精品一区二区三区免费视频| 中文字幕一区久| 亚洲视频电影在线| 欧美xxxx中国| 综合亚洲自拍| 国产成人精品亚洲日本在线观看| 亚洲资源网站| 成人在线黄色| 亚洲精品少妇| 99久久婷婷| 国产精品videossex| 伊人久久亚洲美女图片| 欧美激情麻豆| 欧美中文日韩| 最近高清中文在线字幕在线观看1| 亚洲精品免费观看| 日韩一区电影| 国产精品一线| 石原莉奈在线亚洲二区| 日韩啪啪电影网| 国产精品尤物| 在线观看视频免费一区二区三区| 久久精品国产久精国产爱| 丝瓜av网站精品一区二区 | 久久99偷拍|