>PHP 프레임워크 >ThinkPHP >ThinkPHP6을 사용하여 Excel을 가져오고 내보내는 방법은 무엇입니까?

ThinkPHP6을 사용하여 Excel을 가져오고 내보내는 방법은 무엇입니까?

王林
王林원래의
2023-06-12 09:23:131912검색

인터넷이 발전함에 따라 특히 기업에서는 데이터 가져오기 및 내보내기에 대한 요구가 점점 더 많아지고 있습니다. 매우 인기 있는 사무용 소프트웨어인 Excel은 데이터 저장 및 처리에도 널리 사용됩니다. 따라서 ThinkPHP6를 사용하여 Excel을 가져오고 내보내는 방법이 매우 중요한 문제가 되었습니다. 이 문서에서는 ThinkPHP6을 사용하여 Excel 가져오기 및 내보내기 단계를 소개합니다.

1. Excel 내보내기

ThinkPHP6은 매우 편리한 Excel 내보내기 도구 클래스인 PHPExcel을 제공합니다. PHPExcel을 사용하여 데이터를 Excel 파일로 내보낼 수 있습니다.

1. json 파일에 PHPExcel 클래스 라이브러리를 추가합니다:

"require": {
    "phpoffice/phpexcel": "^1.8"
},

PHPExcel 클래스 라이브러리를 설치하는 명령을 실행합니다:

composer install

2. Excel 내보내기 컨트롤러 만들기

Excel 내보내기 요청을 처리하는 컨트롤러 클래스 만들기:

namespace appdmincontroller;

use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterXlsx as Writer;

class Excel extends Base
{
    public function export()
    {
        // TODO: 导出Excel
    }
}

3. 데이터 소스 구축

엑셀로 내보내기 전, 내보낼 데이터 소스를 준비해야 합니다. 일반적으로 데이터 소스를 가져오는 방법에는 두 가지가 있습니다.

(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');
    }
}

2. Excel 가져오기

ThinkPHP6을 사용하여 Excel 가져오기를 처리하는 것도 매우 편리합니다. 또한 PHPExcel 클래스 라이브러리를 사용하여 구현됩니다.

1 PHPExcel 클래스 라이브러리를 설치합니다. Excel 내보내기 단계와 동일하게 PHPExcel First Class 라이브러리를 설치해야 합니다.

2. Excel 가져오기 컨트롤러 만들기

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으로 문의하세요.