【Laravel】使用phpoffice/phpspreadsheet導入數據


【Laravel】使用phpoffice/phpspreadsheet導入數據

一、安裝PHPExcel

1.下載:PHPExcel  https://github.com/PHPOffice/PHPExcel 

2.解壓后:Classes文件夾改名為PHPExcel 

3.把文件夾PHPExcel 放到根目錄vendor文件夾下

或者

1、composer安裝:

composer require phpoffice/phpspreadsheet

二、控制器引用

use \PhpOffice\PhpSpreadsheet\IOFactory;
use \PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use \PhpOffice\PhpSpreadsheet\Spreadsheet;

<?php
public function import(){
header("content-type:text/html;charset=utf-8");

//上傳excel文件
$files = request()->file();

//將文件保存到public/uploads目錄下面
try {
validate(['image'=>'fileSize:1048576|fileExt:xls'])
->check($files);

$savename = [];
foreach($files as $file){
$savename[] = \think\facade\Filesystem::disk('public')->putFile( 'billfile', $file,'md5');
}

} catch (think\exception\ValidateException $e) {
return json(['status' => '1', 'message' => $e->getMessage()]);
}
//獲取文件路徑
$filePath = ROOT_PATH().'/public/uploads/'.$savename[0];
$spreadsheet = IOFactory::load($filePath);
$sheetData = $spreadsheet->getActiveSheet()->toArray(true, true, true, true,true);
$row_num = count($sheetData);

$now_time = time();
$import_data = []; //數組形式獲取表格數據
for ($i = 2; $i <= $row_num; $i++) {

$bank_deal_no = $sheetData[$i]['A'];
$account_name = $sheetData[$i]['B'];
$bank_card = $sheetData[$i]['C'];
$deal_money = $sheetData[$i]['D'];
$deal_time = $sheetData[$i]['E'];

if(!empty($bank_deal_no) && !empty($account_name) && !empty($bank_card) && !empty($deal_money) && !empty($deal_time) ){
$import_data[$i]['bank_deal_no'] = $bank_deal_no;
$import_data[$i]['account_name'] = $account_name;
$import_data[$i]['bank_card'] = $bank_card;
$import_data[$i]['deal_money'] = $deal_money;
$import_data[$i]['deal_time'] = $deal_time;
$import_data[$i]['create_time'] = $now_time;
$import_data[$i]['update_time'] = $now_time;
}
}

sort($import_data);

if (empty($import_data)) {
return json(['status' => '1', 'message' => '數據解析失敗']);
}

$total_num = count($import_data);
if ($total_num > 100) {
return json(['status' => '1', 'message' => '數據超出限制,最多100條']);
}

//校驗是否重復:交易流水號
$data_array = array_column($import_data, 'bank_deal_no');
$data_ids = implode(',', $data_array);
$result_data = Db::name('user_bank_bill')
->field('bank_deal_no')
->where('bank_deal_no', 'in', $data_ids)
->select()
->toArray();

$error_message = '';
if (!empty($result_data)) {
$result_data_array = array_column($result_data, 'bank_deal_no');
$result_data_ids = implode(',', $result_data_array);
$error_message = '以下流水號有重復,已篩選出: '.$result_data_ids;
foreach ($import_data as $key => $value) {
if(in_array($value['bank_deal_no'],$result_data_array)){
unset($import_data[$key]);
}
}
}


if(!empty($import_data)){
//將數據保存到數據庫
$res = Db::name('user_bank_bill')->insertAll($import_data);
if ($res) {
return json(['status' => '2', 'message' => '操作成功','result'=>$error_message]);
} else {
return json(['status' => '1', 'message' => '提交失敗,請刷新重試']);
}
}

return json(['status' => '2', 'message' => '數據錯誤','result' => $error_message]);



}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM