thinkphp5.1 框架導(dǎo)入/導(dǎo)出excel文件操作示例
本文實(shí)例講述了thinkphp5.1 框架導(dǎo)入/導(dǎo)出excel文件操作。分享給大家供大家參考,具體如下:
thinkphp5.1 導(dǎo)入excel文件
public function importExcel()
{
try {
//獲取表格的大小,限制上傳表格的大小
if ($_FILES['file']['size'] > 10 * 1024 * 1024) { //文件過(guò)大
log_debug($log_title . 'END === MSG:' . '文件過(guò)大');
parent::endBack(['state' => 0, 'msg' => '文件過(guò)大']);
}
//限制上傳表格類型
$ext = substr(strrchr($_FILES['file']["name"], '.'), 1);
if ($ext != 'xls' && $ext != 'xlsx') {
log_debug($log_title . 'END === MSG:' . '文件格式不正確');
parent::endBack(['state' => 0, 'msg' => '上傳文件必須為excel表格']);
}
//讀取表格
$filename = $_FILES['file']['tmp_name'];
$reader = IOFactory::createReader('Xlsx'); //Xls,Xlsx都可讀取
$canRead = $reader->canRead($filename);
if (!$canRead) {
log_debug($log_title . 'END,文件格式不正確,SQL:' . Db::name('')->getLastSql());
parent::endBack(['state' => 0, 'msg' => '文件格式不正確', 're_login' => false]);
}
$spreadsheet = $reader->load($filename); //載入excel表格
$worksheet = $spreadsheet->getActiveSheet(); //選中sheet表
$highestRow = $worksheet->getHighestRow(); // 總行數(shù)
// $highestColumn = $worksheet->getHighestColumn(); // 總列數(shù)
if (!(0 < $highestRow)) {
log_debug($log_title . 'END,文件內(nèi)容空,SQL:' . Db::name('')->getLastSql());
parent::endBack(['state' => 0, 'msg' => '文件沒(méi)有數(shù)據(jù)', 're_login' => false]);
}
//循環(huán)讀取--有效判斷
$sst_word_arr = []; //存放敏感詞的數(shù)組
for ($row = 1; $row <= $highestRow; $row++) {
//取列數(shù)A列的數(shù)據(jù)
$tmp_word = $spreadsheet->getActiveSheet()->getCell('A' . $row)->getValue();
if ('' != trim($tmp_word) && null != $tmp_word) {
$sst_word_arr[] = $tmp_word;
break; //發(fā)現(xiàn)有效數(shù)據(jù),直接退出,接下來(lái)插入數(shù)據(jù)
}
}
// $sst_word_arr = array_unique($sst_word_arr);
if (empty($sst_word_arr)) {
log_debug($log_title . 'END,文件無(wú)有效數(shù)據(jù),SQL:' . Db::name('')->getLastSql());
parent::endBack(['state' => 0, 'msg' => '文件無(wú)有效數(shù)據(jù)', 're_login' => false]);
}
//判斷和數(shù)據(jù)庫(kù)操作
for ($row = 2; $row <= $highestRow; $row++) {
//取列數(shù)A列的數(shù)據(jù)
$tmp_old_car_num = $spreadsheet->getActiveSheet()->getCell('A' . $row)->getValue();
$car_num = trim($tmp_old_car_num);
if ('' != $car_num && null != $car_num) {
//數(shù)據(jù)庫(kù)操作
}
}
}
$ret_arr = [
'state' => 1,
//返回?cái)?shù)據(jù)
];
log_debug($log_title . 'END,SUCCESS');
parent::endBack($ret_arr);
} catch (\Exception $e) {
//
}
}
excel文件格式為:

thinkphp5.1 導(dǎo)出excel文件
namespase app\test;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class test {
public function carNumsExport()
{
$log_title = '測(cè)試 => 車牌列表導(dǎo)出[' . __METHOD__ . '] ';
try {
$file_name = '《車牌列表》from y8zh - ' . $user_info['uid'] . '.xlsx';
$file_relative_path = parent::$module_name . DIRECTORY_SEPARATOR . 'fcb_car_nums' . DIRECTORY_SEPARATOR;
$file_path = parent::$api_file_root_path . $file_relative_path;
// 已生成過(guò)則直接返回
if (file_exists($file_path . $file_name)) {
$ret_arr = [
'state' => 1,
'download_url' => parent::$api_file_get_url . $file_relative_path . $file_name,
];
parent::endBack($ret_arr);
}
if (!is_dir($file_path)) {
mkdir($file_path, 0777, true);
}
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
//獲取所有車牌號(hào)
$car_nums = Db::connect('db_config_yun')->name('vechicle')->column('DISTINCT number');
$i = 1;
$sheet->setCellValue('A' . $i, '車牌號(hào)')->getStyle('A' . $i)->getFont()->setBold(true);
$i++;
// 表內(nèi)容
if (!empty($car_nums)) {
foreach ($car_nums as $k_c => $v_c) {
$sheet->setCellValue('A' . $i, $v_c);
$i++;
}
}
$writer = new Xlsx($spreadsheet);
$writer->save($file_path . $file_name);
$ret_arr = [
'state' => 1,
'download_url' => parent::$api_file_get_url . $file_relative_path . $file_name,
];
log_debug($log_title . 'END === DOWNLOAD_URL:' . $ret_arr['download_url']);
parent::endBack($ret_arr);
} catch (\Exception $e) {
//
}
}
}
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP驗(yàn)證終端類型是否為手機(jī)的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇PHP驗(yàn)證終端類型是否為手機(jī)的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十六)
這篇文章主要介紹了PHP網(wǎng)頁(yè)游戲Xnova(ogame)源碼解讀的攻擊任務(wù)頁(yè)面的代碼流程,需要的朋友可以參考下2014-06-06
詳解PHP如何更好的利用PHPstorm的自動(dòng)提示
本篇文章主要介紹了詳解PHP如何更好的利用PHPstorm的自動(dòng)提示,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
laravel返回統(tǒng)一格式錯(cuò)誤碼問(wèn)題
在使用yii和laravel的過(guò)程中,兩個(gè)框架對(duì)web-api都非常友好,也都對(duì)restful做了不同程度的支持,但是還是遇到了一些問(wèn)題,下面以laravel6.4為例,簡(jiǎn)單描述下我遇到的問(wèn)題,需要的朋友參考下吧2019-11-11
thinkPHP5.0框架API優(yōu)化后的友好性分析
這篇文章主要介紹了thinkPHP5.0框架API優(yōu)化后的友好性,結(jié)合具體實(shí)例分析了thinkPHP5.0框架進(jìn)行API優(yōu)化后在數(shù)據(jù)輸出及錯(cuò)誤調(diào)試方面的友好性改進(jìn),需要的朋友可以參考下2017-03-03
php+webSoket實(shí)現(xiàn)聊天室示例代碼(附源碼)
本篇文章主要介紹了php+webSoket搭建chatServer示例(附源碼)的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-02-02
基于PHP實(shí)現(xiàn)發(fā)微博動(dòng)態(tài)代碼實(shí)例
這篇文章主要介紹了基于PHP實(shí)現(xiàn)發(fā)微博動(dòng)態(tài)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12

