### 上傳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