PhpSpreadsheet đọc ví dụ Excel

Khi làm việc trên các ứng dụng web, đôi khi chúng ta gặp trường hợp cần nhập tệp CSV hoặc Excel vào cơ sở dữ liệu. Đó là cách ưu tiên để nhập dữ liệu lớn vào cơ sở dữ liệu hơn là nhập từng dữ liệu một. Thêm các bản ghi lớn theo chương trình giúp tiết kiệm rất nhiều thời gian

Để thực hiện các nhiệm vụ như vậy, bạn cần viết một chương trình có thể đọc dữ liệu từ bảng tính. Những bản ghi này sau đó có thể được chèn vào cơ sở dữ liệu

PhpSpreadsheet là thư viện giúp bạn đọc file CSV hoặc Excel. Thư viện cung cấp hỗ trợ đọc và ghi các loại định dạng tệp khác nhau. Dưới đây là ảnh chụp màn hình của các định dạng tệp được hỗ trợ

PhpSpreadsheet đọc ví dụ Excel

Trước khi tôi biết đến thư viện này, tôi đã sử dụng phương pháp fgetcsv để đọc tệp CSV. Và đối với các tệp Excel, trước tiên tôi cần chuyển đổi Excel sang CSV và sau đó đọc nó bằng hàm fgetcsv()

PhpSpreadsheet đơn giản hóa nhiệm vụ này cho các nhà phát triển. Sử dụng PhpSpreadsheet, việc xử lý dữ liệu từ tệp CSV và Excel sẽ dễ dàng hơn. Ngoài ra, bạn không cần chuyển đổi Excel sang CSV, thư viện đọc trực tiếp tệp Excel

Như đã nói, chúng ta hãy xem cách đọc các tệp CSV và Excel bằng PhpSpreadsheet

Cài đặt thư viện PhpSpreadsheet

Để cài đặt thư viện này, tôi khuyên bạn nên sử dụng Composer. Mở terminal trong thư mục gốc dự án của bạn và chạy lệnh

composer require phpoffice/phpspreadsheet

Trong phần tiếp theo của hướng dẫn, tôi sẽ đọc các tệp CSV/Excel và chèn dữ liệu của chúng vào cơ sở dữ liệu. Đối với điều này, tôi đã tạo các tệp giả có chứa dữ liệu giả như sau

PhpSpreadsheet đọc ví dụ Excel

Để lưu trữ những bản ghi này, tôi đang tạo một bảng 'người dùng' trong cơ sở dữ liệu

CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 `email` varchar(255) DEFAULT NULL,
 `company` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Vì lợi ích của hướng dẫn, tôi đang sử dụng dữ liệu giả ở trên. Người dùng nên thay đổi cấu trúc bảng theo tập dữ liệu của họ

Tiếp theo, tạo một config.php và thêm mã kết nối cơ sở dữ liệu vào đó

cấu hình. php

<?php
$db_host = 'DB_HOST';
$db_username = 'DB_USERNAME';
$db_password = 'DB_PASSWORD';
$db_name = 'DB_NAME';
 
$db = new mysqli($db_host, $db_username, $db_password, $db_name);
 
if($db->connect_error){
    die("Unable to connect database: " . $db->connect_error);
}

Đảm bảo thay thế các phần giữ chỗ bằng các giá trị thực

Đọc tệp CSV/Excel trong PHP

Hãy thực hiện mã hóa thực tế. Đầu tiên, tạo một biểu mẫu sẽ có nút nhập và gửi tệp. Người dùng tải lên tệp CSV/Excel của họ và nhấn nút gửi. Khi gửi biểu mẫu, các mục nhập của tệp đã tải lên phải được chèn vào bảng 'người dùng'

<form method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <p><button type="submit" name="submit">Submit</button></p>
</form>

Tiếp theo, mã sẽ thực thi khi gửi biểu mẫu sẽ như sau

<?php
require_once 'vendor/autoload.php';
require_once 'config.php';
 
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Csv;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
 
if (isset($_POST['submit'])) {
 
    $file_mimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
     
    if(isset($_FILES['file']['name']) && in_array($_FILES['file']['type'], $file_mimes)) {
     
        $arr_file = explode('.', $_FILES['file']['name']);
        $extension = end($arr_file);
     
        if('csv' == $extension) {
            $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
        } else {
            $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
        }
 
        $spreadsheet = $reader->load($_FILES['file']['tmp_name']);
 
        $sheetData = $spreadsheet->getActiveSheet()->toArray();
 
        if (!empty($sheetData)) {
            for ($i=1; $i<count($sheetData); $i++) { //skipping first row
                $name = $sheetData[$i][0];
                $email = $sheetData[$i][1];
                $company = $sheetData[$i][2];

                $db->query("INSERT INTO USERS(name, email, company) VALUES('$name', '$email', '$company')");
            }
        }
        echo "Records inserted successfully.";
    } else {
        echo "Upload only CSV or Excel file.";
    }
}
?>

Trong đoạn mã trên, tôi đang tìm loại tệp cho dù đó là CSV hay Excel. Và sau đó tôi đang đọc tệp bằng các chức năng được cung cấp cho các định dạng tệp này. Bạn có thể đọc thêm về điều này trên tài liệu chính thức tại đây

Tôi hy vọng bạn hiểu cách đọc tệp CSV và Excel bằng PhpSpreadsheet. Nếu bạn muốn ghi vào bảng tính thì hãy xem bài viết Xuất dữ liệu cơ sở dữ liệu MySQL sang Excel/CSV bằng PHP

Làm cách nào để đọc tệp Excel trong PhpSpreadsheet?

Cách đơn giản nhất để tải tệp sổ làm việc là để IO Factory của PhpSpreadsheet xác định loại tệp và tải nó, gọi phương thức tải tĩnh() của \PhpOffice\PhpSpSpreadsheet\ . $inputFileName = '. /sampleData/example1. . $inputFileName = './sampleData/example1.

Làm cách nào để đọc giá trị ô Excel trong php?

Có thể đọc giá trị của một ô bằng cách sử dụng phương thức getValue() . // Lấy giá trị từ ô A1 $cellValue = $spreadsheet->getActiveSheet()->getCell('A1')->getValue(); .

Làm cách nào để đọc tệp xlsx trong php?

Đọc tệp Excel (XLSX)​ .
Tạo Trình đọc Excel bằng ReaderEntityFactory. tạoXLSXReader()
Mở tệp XLSX bằng $reader->open($path)
Duyệt từng Sheet của bảng tính với $reader->getSheetIterator()
Duyệt qua từng Hàng của Trang tính với $sheet->getRowIterator()
Duyệt qua từng Ô của Hàng với $row->getCells()

Làm cách nào để trích xuất dữ liệu từ Excel bằng php?

Xuất dữ liệu sang Excel bằng PHP .
Biến $fileName xác định tên của tệp excel
Các tiêu đề Bố trí nội dung và Loại nội dung buộc tải xuống tệp excel
Chạy vòng lặp qua từng cặp khóa/giá trị trong mảng $data
Hiển thị tên cột dưới dạng hàng đầu tiên bằng cách sử dụng biến $flag