隨著互聯網的發展,數據導入和導出的需求越來越多,尤其是在企業中。Excel作為一種非常流行的辦公軟件,也被廣泛應用于數據的存儲和處理。因此,怎樣使用ThinkPHP6進行Excel的導入和導出已經成為了一個很重要的問題。本文將介紹使用ThinkPHP6進行Excel導入和導出的步驟。
一、Excel導出
ThinkPHP6提供了一個非常方便的Excel導出工具類——PHPExcel,使用PHPExcel可以將數據導出為Excel文件,具體步驟如下:
1.安裝PHPExcel類庫
在composer.json文件中添加PHPExcel類庫:
"require": { "phpoffice/phpexcel": "^1.8" },
登錄后復制
執行命令安裝PHPExcel類庫:
composer install
登錄后復制
2.創建Excel導出Controller
創建一個控制器類來處理Excel導出的請求:
namespace appdmincontroller; use PhpOfficePhpSpreadsheetSpreadsheet; use PhpOfficePhpSpreadsheetWriterXlsx as Writer; class Excel extends Base { public function export() { // TODO: 導出Excel } }
登錄后復制
3.構造數據源
在導出Excel之前,需要先準備好要導出的數據源。通常有兩種方式來獲取數據源:
(1) 從數據庫中獲取數據
namespace appdmincontroller; use appdminmodelUser as UserModel; use PhpOfficePhpSpreadsheetSpreadsheet; use PhpOfficePhpSpreadsheetWriterXlsx as Writer; class Excel extends Base { public function export() { $users = UserModel::select()->toArray(); $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'ID'); $sheet->setCellValue('B1', '姓名'); $sheet->setCellValue('C1', '性別'); $sheet->setCellValue('D1', '年齡'); $row = 2; foreach ($users as $user) { $sheet->setCellValue('A' . $row, $user['id']); $sheet->setCellValue('B' . $row, $user['name']); $sheet->setCellValue('C' . $row, $user['gender']); $sheet->setCellValue('D' . $row, $user['age']); $row++; } $writer = new Writer($spreadsheet); $writer->save('users.xlsx'); } }
登錄后復制
(2) 從其他數據源獲取數據
如果我們要將一些數據導出為Excel文件,但這些數據并不存儲在數據庫中,比如我們要以Excel的形式導出一些訂單信息等。這時,我們可以通過其他方式來獲取這些數據,例如從網絡API接口中獲取。
namespace appdmincontroller; use GuzzleHttpClient; use PhpOfficePhpSpreadsheetSpreadsheet; use PhpOfficePhpSpreadsheetWriterXlsx as Writer; class Excel extends Base { public function export() { $client = new Client(); $response = $client->get('https://api.example.com/orders'); $orders = json_decode($response->getBody()->getContents(), true); $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', '訂單編號'); $sheet->setCellValue('B1', '下單人'); $sheet->setCellValue('C1', '訂單金額'); $row = 2; foreach ($orders as $order) { $sheet->setCellValue('A' . $row, $order['id']); $sheet->setCellValue('B' . $row, $order['user']); $sheet->setCellValue('C' . $row, $order['amount']); $row++; } $writer = new Writer($spreadsheet); $writer->save('orders.xlsx'); } }
登錄后復制
二、Excel導入
使用ThinkPHP6處理Excel導入也非常方便,同樣使用PHPExcel類庫實現,具體步驟如下:
1.安裝PHPExcel類庫
同Excel導出的步驟一樣,需要先安裝PHPExcel類庫。
2.創建Excel導入Controller
創建一個控制器類來處理Excel導入的請求:
namespace appdmincontroller; use PhpOfficePhpSpreadsheetIOFactory; class Excel extends Base { public function import() { $file = request()->file('file'); $info = $file->validate(['ext' => 'xlsx'])->move('uploads'); if ($info) { $filename = 'uploads/' . $info->getSaveName(); $reader = IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load($filename); $sheet = $spreadsheet->getActiveSheet(); $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); $data = []; for ($row = 2; $row <= $highestRow; $row++) { $rowData = []; for ($column = 'A'; $column <= $highestColumn; $column++) { $cellValue = $sheet->getCell($column . $row)->getValue(); $rowData[] = $cellValue; } $data[] = $rowData; } unlink($filename); dump($data); } else { echo $file->getError(); } } }
登錄后復制
3.上傳Excel文件
我們需要在視圖中添加一個上傳表單,來讓用戶上傳要導入的Excel文件。
<form method="post" action="admin/excel/import" ??????enctype="multipart/form-data"> ??????<input type="file" name="file"> ??????<input type="submit" value="上傳"> </form>
登錄后復制
4.處理導入數據
在導入Excel之后,我們可以通過PHPExcel提供的API獲取到導入的數據。在上面的代碼中,我們使用了以下代碼來獲取數據:
$highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); $data = []; for ($row = 2; $row <= $highestRow; $row++) { $rowData = []; for ($column = 'A'; $column <= $highestColumn; $column++) { $cellValue = $sheet->getCell($column . $row)->getValue(); $rowData[] = $cellValue; } $data[] = $rowData; }
登錄后復制
導入的數據即存儲在$data變量中,我們可以進行后續的數據處理操作,比如將數據插入到數據庫中。
綜上所述,使用ThinkPHP6進行Excel導入和導出相對來說比較簡單,通過使用PHPExcel類庫,我們可以很方便地實現Excel文件的讀取和導出。
以上就是怎樣使用ThinkPHP6進行Excel導入和導出?的詳細內容,更多請關注www.xfxf.net其它相關文章!