### 上传excel,并且将其数据插入数据库
> php上传excel需要用到PHPExcel
>
> 需要composer安装:composer require phpoffice/phpexcel(该方法最好实时从网上寻找,此不一定管用,以实际为准)
> composer安装完成在方法中使用
```php
use PHPExcel_IOFactory;
use PHPExcel;
```
> tp中使用
>
```php
// excel上传
public function excel_upload(){
Db::startTrans();
try {
$file = $_FILES['file']; //需要用这种方法接收
$extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); //pathinfo()函数以数组的形式返回文件路径的信息
if ($extension == "xlsx") {
//2007(相当于是打开接收的这个excel)
$objReader = \PHPExcel_IOFactory::createReader('Excel2007');
} else {
//2003(相当于是打开接收的这个excel)
exit(json_encode(['status' => 0, 'msg' => '不是期望的文件']));
}
// 这是另外一种,把表数据分为ABCD等来区分
//载入文件
$PHPExcel = $objReader->load($file['tmp_name']);
//获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$currentSheet = $PHPExcel->getSheet(0);
//获取总列数
$allColumn = $currentSheet->getHighestColumn();
//获取总行数
$allRow = $currentSheet->getHighestRow();
//循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始
for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {
//从哪列开始,A表示第一列
for ($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) {
//数据坐标
$address = $currentColumn . $currentRow;
//读取到的数据,保存到数组$data中
$cell = $currentSheet->getCell($address)->getValue();
$data[$currentRow - 1][$currentColumn] = $cell;
}
}
// 这是第一种,就是简单的
$objContent = $objReader->load($file['tmp_name']); //加载缓存文件
$sheetContent = $objContent->getSheet(0) //获取活动的表格
->toArray(); // 转换成数组
$excel_array = $sheetContent[0];
array_shift($sheetContent);
$data = [];
// 表格数据转为数组,而且该数组格式固定
foreach ($sheetContent as $k => $v){
$data[$k]['supplier_name'] = $v[0];
$data[$k]['goods_code'] = $v[1];
$data[$k]['goods_name'] = $v[2];
$data[$k]['color'] = $v[3];
$data[$k]['color_code'] = $v[4];
$data[$k]['size_code'] = $v[5];
$data[$k]['size_name'] = $v[6];
$data[$k]['barcode'] = $v[7];
$data[$k]['inventory'] = $v[8];
// 这是判断店铺
if (count($v) > 9){
$shops_id = '';
$num = '';
for ($i = 1; $i <= count($v)-9 ; $i++){
// 判断是否在该店有库存
if ($v[8+$i] != null){
$shops = Shops::where(['name' => $excel_array[8+$i]])->find();
if (!$shops) throw new Exception('没有该店铺'.$excel_array[8+$i].',请在后台添加', 1);
$shops_id = $shops['id'].','.$shops_id;
$num = $v[8+$i].','.$num;
}
}
$shops_ids = substr($shops_id,0, strlen($shops_id)-1);
$nums = substr($num,0, strlen($num)-1);
$data[$k]['num'] = $nums;
$data[$k]['shop_id'] = $shops_ids;
}
}
Db::commit();
success();
} catch (Exception $e) {
Db::rollback();
error($e->getMessage());
}
}
```
### PHPExcel插入数据库内存溢出解决方案
- 修改本方法的配置文件,此属下策方案
> 方法1、扩大php默认分配内存
```
ini_set("memory_limit", "13312M");
set_time_limit(0);
```
- 介绍
- PHP
- 过滤
- 访问第三方
- 封装概率
- 将反斜杠转成正斜杠
- 超长数字运算
- php高级
- 设计模式
- TP笔记
- tp5
- TP
- 时间操作
- 模型
- Base函数
- 字符串数组操作
- 数据库
- 查询
- 其它操作
- 文件类操作
- 上传
- 导出
- 压缩
- tp6
- 封装上传方法
- 浏览器下载文件
- deepin踩坑
- mysql安装相关
- layui
- layui表格操作
- layui表格点击图片放大
- layui点击数据表格添加或删除一行
- layui表格操作
- lemocms
- html相关
- 按钮
- js
- crud的js函数
- base相关函数
- layui关闭弹窗层并刷新父窗口
- 表单操作
- h5+js
- layui图片上传和预览
- 多图上传
- 自定义
- vscode
- vs更换电脑时,同步配置
- 前端
- vue-admin后台
- 相关操作
- js相关
- js播报语音
- js监听页面扫码枪
- fastadmin
- fast的js
- Typora
- 数据库
- MySQL