隨著互聯網的發展,數據導入和導出的需求越來越多,尤其是在企業中。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其它相關文章!






