Kode ekspor PHP Excel (data ke file)

Programming

Oleh Vinci terakhir diubah pada 23 September 2022.

Mengekspor data ke file Excel terutama digunakan untuk cadangan. Saat mencadangkan database, format Excel adalah format yang mudah dibaca dan dikelola. Untuk beberapa aplikasi, ekspor data penting untuk menyediakan cadangan atau salinan offline database server.

Artikel ini menunjukkan cara mengekspor data ke Excel menggunakan PHP. Ada banyak cara untuk mengimplementasikan fitur ini. Kami telah melihat contoh mengekspor data dari MySQL.

Artikel ini menggunakan library PHPSpreadSheet untuk mengimplementasikan ekspor PHP excel.

Ini adalah perpustakaan populer yang mendukung membaca dan menulis file Excel. Melalui fungsi bawaannya, ini membuat operasi ekspor dan impor Excel lebih lancar.

Contoh lengkap dalam artikel ini memungkinkan Anda membuat alat atau aplikasi ekspor sendiri.
Ekspor php ke Excel

Tentang contoh ini

Ini menunjukkan antarmuka minimal dengan daftar catatan database dan tombol “Ekspor ke Excel”. Mengklik tombol ini akan memanggil ExportService khusus yang dibuat untuk contoh ini.

Layanan ini membuat instance class library PHPSpreadsheet dan menyetel header kolom dan nilai. Itu kemudian membuat objek penulis dengan mengatur instance PHPSpreadsheet untuk menghasilkan data dalam mode Excel.

Ikuti langkah-langkah di bawah ini untuk menjalankan contoh ini di lingkungan Anda.

  1. Membuat dan menyiapkan database dengan data yang diekspor ke Excel.
  2. Unduh kode di akhir artikel ini dan konfigurasikan database.
  3. Tambahkan perpustakaan PHPSpreadSheet dan dependensi lainnya ke aplikasi.

Kami telah menggunakan perpustakaan PHPSpreadsheet untuk menyimpan URL gambar yang diekstraksi.

1) Buat dan inisialisasi database dengan data yang diekspor ke Excel

Buat database bernama “db_excel_export” dan masukkan skrip SQL berikut ke dalamnya.

struktur.sql

--
-- Table structure for table `tbl_products`
--

CREATE TABLE `tbl_products` (
  `id` int(8) NOT NULL,
  `name` varchar(255) NOT NULL,
  `price` double(10,2) NOT NULL,
  `category` varchar(255) NOT NULL,
  `product_image` text NOT NULL,
  `average_rating` float(3,1) NOT NULL
);

--
-- Dumping data for table `tbl_products`
--

INSERT INTO `tbl_products` (`id`, `name`, `price`, `category`, `product_image`, `average_rating`) VALUES
(1, 'Tiny Handbags', 100.00, 'Fashion', 'gallery/handbag.jpeg', 5.0),
(2, 'Men\'s Watch', 300.00, 'Generic', 'gallery/watch.jpeg', 4.0),
(3, 'Trendy Watch', 550.00, 'Generic', 'gallery/trendy-watch.jpeg', 4.0),
(4, 'Travel Bag', 820.00, 'Travel', 'gallery/travel-bag.jpeg', 5.0),
(5, 'Plastic Ducklings', 200.00, 'Toys', 'gallery/ducklings.jpeg', 4.0),
(6, 'Wooden Dolls', 290.00, 'Toys', 'gallery/wooden-dolls.jpeg', 5.0),
(7, 'Advanced Camera', 600.00, 'Gadget', 'gallery/camera.jpeg', 4.0),
(8, 'Jewel Box', 180.00, 'Fashion', 'gallery/jewel-box.jpeg', 5.0),
(9, 'Perl Jewellery', 940.00, 'Fashion', 'gallery/perls.jpeg', 5.0);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tbl_products`
--
ALTER TABLE `tbl_products`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tbl_products`
--
ALTER TABLE `tbl_products`
  MODIFY `id` int(8) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;

2) Unduh kode dan konfigurasikan database

Kode sumber berisi file-file berikut. Bagian ini menjelaskan konfigurasi database.

Struktur file ekspor Excel

Setelah Anda mengunduh kode ekspor Excel dari halaman ini, Anda dapat menemukan DataSource.php file di lib Buka foldernya dan konfigurasikan detail database di dalamnya seperti di bawah ini.

<?php 
class DataSource
{

    const HOST = 'localhost';

    const USERNAME = 'root';

    const PASSWORD = '';

    const DATABASENAME = 'db_excel_export';

    ...
    ...
?>

3) Tambahkan perpustakaan PHPSpreadSheet dan dependensi lainnya ke aplikasi

Langkah-langkah instalasi mudah diikuti ketika Anda melihat dokumentasi PHPSpreadsheet.

Ini menginstruksikan komposer untuk menambahkan halaman PHPSpreadsheet dan dependensinya ke aplikasi.

composer require phpoffice/phpspreadsheet

Untuk PHP versi 7

Tambahkan spesifikasi berikut ke file composer.json.

{
    "require": {
        "phpoffice/phpspreadsheet": "^1.23"
    },
    "config": {
        "platform": {
            "php": "7.3"
        }
    }
}

Lalu lari

composer update

Catatan: PHPSpreadsheet membutuhkan setidaknya PHP 7.3.

bagaimana itu bekerja

Antarmuka sederhana dengan opsi ekspor

Halaman ini mengambil data dari database MySQL dan menampilkannya dalam kotak. Di bawah kisi data, halaman ini menampilkan tombol “Ekspor Excel”.

Mengklik tombol ini mengirimkan parameter tindakan ke URL untuk memanggil layanan ekspor Excel di PHP.

index.php

<?php
require_once __DIR__ . '/lib/Post.php';
$post = new post();
$postResult = $post->getAllPost();
$columnResult = $post->getColumnName();
if (! empty($_GET["action"])) {
    require_once __DIR__ . '/lib/ExportService.php';
    $exportService = new ExportService();
    $result = $exportService->exportExcel($postResult, $columnResult);
}
?>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://phppot.com/php/php-excel-export/./style.css" type="text/css" rel="stylesheet" />
</head>
<body>
    <div id="table-container">
        <table id="tab">
            <thead>
                <tr>
                    <th width="5%">Id</th>
                    <th width="35%">Name</th>
                    <th width="20%">Price</th>
                    <th width="25%">Category</th>
                    <th width="25%">product Image</th>
                    <th width="20%">Average Rating</th>
                </tr>
            </thead>
            <tbody>
            <?php
            if (! empty($postResult)) {
                foreach ($postResult as $key => $value) {
                    ?>
                <tr>
                    <td><?php echo $postResult[$key]["id"]; ?></td>
                    <td><?php echo $postResult[$key]["name"]; ?></td>
                    <td><?php echo $postResult[$key]["price"]; ?></td>
                    <td><?php echo $postResult[$key]["category"]; ?></td>
                    <td><?php echo $postResult[$key]["product_image"]; ?></td>
                    <td><?php echo $postResult[$key]["average_rating"]; ?></td>
                </tr>
            <?php
                }
            }
            ?>
            </tbody>
        </table>
        <div class="btn">
            <form action="" method="POST">
                <a
                    href="<?php echo strtok($_SERVER["REQUEST_URI"]);?><?php echo $_SERVER["QUERY_STRING"];?>?action=export"><button
                        type="button" id="btnExport" name="Export"
                        value="Export to Excel" class="btn btn-info">Export
                        to Excel</button></a>
            </form>
        </div>
    </div>
</body>
</html>

Panggilan model PHP menyiapkan kueri untuk mengambil data untuk ekspor

Ini adalah kelas model PHP yang dipanggil untuk membaca data dari database. Array data dikirim ke layanan ekspor untuk membuat objek lembar Excel.

ini getColumnName() Membaca array nama kolom tabel database. Array ini menyediakan data untuk membentuk baris pertama di Excel untuk membuat header kolom.

partikel untuk objek langsung dapatkanSemuaPost() Membaca baris data yang diulang dan menyetel sel data dengan nilai.

lib/Post.php

<?php
class Post
{

    private $ds;

    public function __construct()
    {
        require_once __DIR__ . '/DataSource.php';
        $this->ds = new DataSource();
    }

    public function getAllPost()
    {
        $query = "select * from tbl_products";
        $result = $this->ds->select($query);
        return $result;
    }

    public function getColumnName()
    {
        $query = "select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=N'tbl_products'";
        $result = $this->ds->select($query);
        return $result;
    }
}
?>

Layanan ekspor PHP Excel

Layanan ini membantu mengekspor data ke lembar Excel. File yang dihasilkan diunduh di browser dengan mengatur properti PHP header().

$postResult memiliki data baris dan $columnResult memiliki data kolom.

Contoh ini membuat instance class library PHPSpreadSheet dan menyetel header dan nilai kolom. Itu kemudian membuat objek penulis dengan mengatur contoh spreadsheet ke data keluaran dalam mode Excel.

lib/ExportService.php

<?php
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Calculation\TextData\Replace;
require_once __DIR__ . '/../vendor/autoload.php';

class ExportService
{

    public function exportExcel($postResult, $columnResult)
    {
        $spreadsheet = new Spreadsheet();
        $spreadsheet->getProperties()->setTitle("excelsheet");
        $spreadsheet->setActiveSheetIndex(0);
        $spreadsheet->getActiveSheet()->SetCellValue('A1', ucwords($columnResult[0]["COLUMN_NAME"]));
        $spreadsheet->getActiveSheet()->SetCellValue('B1', ucwords($columnResult[1]["COLUMN_NAME"]));
        $spreadsheet->getActiveSheet()->SetCellValue('C1', ucwords($columnResult[2]["COLUMN_NAME"]));
        $spreadsheet->getActiveSheet()->SetCellValue('D1', ucwords($columnResult[3]["COLUMN_NAME"]));
        $spreadsheet->getActiveSheet()->SetCellValue('E1', str_replace('_', ' ', ucwords($columnResult[4]["COLUMN_NAME"], '_')));
        $spreadsheet->getActiveSheet()->SetCellValue('F1', str_replace('_', ' ', ucwords($columnResult[5]["COLUMN_NAME"], '_')));
        $spreadsheet->getActiveSheet()
            ->getStyle("A1:F1")
            ->getFont()
            ->setBold(true);
        $rowCount = 2;
        if (! empty($postResult)) {
            foreach ($postResult as $k => $v) {
                $spreadsheet->getActiveSheet()->setCellValue("A" . $rowCount, $postResult[$k]["id"]);
                $spreadsheet->getActiveSheet()->setCellValue("B" . $rowCount, $postResult[$k]["name"]);
                $spreadsheet->getActiveSheet()->setCellValue("C" . $rowCount, $postResult[$k]["price"]);
                $spreadsheet->getActiveSheet()->setCellValue("D" . $rowCount, $postResult[$k]["category"]);
                $spreadsheet->getActiveSheet()->setCellValue("E" . $rowCount, $postResult[$k]["product_image"]);
                $spreadsheet->getActiveSheet()->setCellValue("F" . $rowCount, $postResult[$k]["average_rating"]);
                $rowCount ++;
            }
            $spreadsheet->getActiveSheet()
                ->getStyle('A:F')
                ->getAlignment()
                ->setWrapText(true);

            $spreadsheet->getActiveSheet()
                ->getRowDimension($rowCount)
                ->setRowHeight(- 1);
        }
        $writer = IOFactory::createWriter($spreadsheet, 'Xls');
        header('Content-Type: text/xls');
        $fileName="exported_excel_" . time() . '.xls';
        $headerContent="Content-Disposition: attachment;filename="" . $fileName . '"';
        header($headerContent);
        $writer->save('php://output');
    }
}
?>

Unduh

Kembali ke atas


Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.