本文实例讲述了thinkphp5.1 框架导入/导出excel文件操作。分享给大家供大家参考,具体如下:
thinkphp5.1 导入excel文件
public function importExcel()
{
try {
//获取表格的大小,限制上传表格的大小
if ($_FILES['file']['size'] > 10 * 1024 * 1024) { //文件过大
log_debug($log_title . 'END === MSG:' . '文件过大');
parent::endBack(['state' => 0, 'msg' => '文件过大']);
}
//限制上传表格类型
$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(); // 总行数
// $highestColumn = $worksheet->getHighestColumn(); // 总列数
if (!(0 < $highestRow)) {
log_debug($log_title . 'END,文件内容空,SQL:' . Db::name('')->getLastSql());
parent::endBack(['state' => 0, 'msg' => '文件没有数据', 're_login' => false]);
}
//循环读取--有效判断
$sst_word_arr = []; //存放敏感词的数组
for ($row = 1; $row <= $highestRow; $row++) {
//取列数A列的数据
$tmp_word = $spreadsheet->getActiveSheet()->getCell('A' . $row)->getValue();
if ('' != trim($tmp_word) && null != $tmp_word) {
$sst_word_arr[] = $tmp_word;
break; //发现有效数据,直接退出,接下来插入数据
}
}
// $sst_word_arr = array_unique($sst_word_arr);
if (empty($sst_word_arr)) {
log_debug($log_title . 'END,文件无有效数据,SQL:' . Db::name('')->getLastSql());
parent::endBack(['state' => 0, 'msg' => '文件无有效数据', 're_login' => false]);
}
//判断和数据库操作
for ($row = 2; $row <= $highestRow; $row++) {
//取列数A列的数据
$tmp_old_car_num = $spreadsheet->getActiveSheet()->getCell('A' . $row)->getValue();
$car_num = trim($tmp_old_car_num);
if ('' != $car_num && null != $car_num) {
//数据库操作
}
}
}
$ret_arr = [
'state' => 1,
//返回数据
];
log_debug($log_title . 'END,SUCCESS');
parent::endBack($ret_arr);
} catch (\Exception $e) {
//
}
}
excel文件格式为:
thinkphp5.1 导出excel文件
namespase app\test;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class test {
public function carNumsExport()
{
$log_title = '测试 => 车牌列表导出[' . __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;
// 已生成过则直接返回
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();
//获取所有车牌号
$car_nums = Db::connect('db_config_yun')->name('vechicle')->column('DISTINCT number');
$i = 1;
$sheet->setCellValue('A' . $i, '车牌号')->getStyle('A' . $i)->getFont()->setBold(true);
$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) {
//
}
}
}
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
桃源资源网 Design By www.nqtax.com
暂无“thinkphp5.1 框架导入/导出excel文件操作示例”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
