首頁 >php框架 >ThinkPHP >怎麼使用ThinkPHP6進行Excel導入與導出?

怎麼使用ThinkPHP6進行Excel導入與導出?

王林
王林原創
2023-06-12 09:23:131915瀏覽

隨著網路的發展,資料匯入和匯出的需求越來越多,尤其是在企業中。 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導入與導出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn