Jak czytać i zapisywać pliki arkuszy kalkulacyjnych w PHP
Podczas pracy nad aplikacjami webowymi często spotykamy się z sytuacją, w której musimy pobawić się plikami arkusza kalkulacyjnego. Możemy chcieć odczytać dane z arkuszy kalkulacyjnych i je przetworzyć. Czasami wymagane jest również tworzenie i zapisywanie plików arkuszy kalkulacyjnych.
W tym artykule dowiemy się, jak czytać i pisać pliki arkuszy kalkulacyjnych w PHP. Kod, który wyjaśnimy, będzie działał na 3 typach arkuszy kalkulacyjnych – CSV, XLSX i ODS.
Pierwsze kroki
Jako programista chciałbym poeksperymentować z różnymi pakietami, które mogą być pomocne w rozwiązywaniu rzeczywistych problemów. Ostatnio natknąłem się na paczkę o nazwie box/sout. Podobał mi się sposób, w jaki biblioteka wykonywała zadania. Korzystając z tej biblioteki, możesz przetwarzać pliki arkuszy kalkulacyjnych za pomocą zaledwie kilku wierszy kodu.
Ta biblioteka jest w stanie przetwarzać pliki o dowolnym rozmiarze. Możliwe, że masz do czynienia z dużym plikiem. Podczas tego procesu duży plik nie powinien zużywać pamięci i powodować problemy z wydajnością. Biblioteka wylewek rozwiązuje ten problem. Potrzebuje tylko 3 MB pamięci do przetworzenia dowolnego pliku.
Zanim zaczniesz, Twój serwer powinien spełnić poniższe wymagania.
- PHP w wersji 7.2 lub nowszej
- Rozszerzenie PHP
php_zip
włączone - Rozszerzenie PHP
php_xmlreader
włączone
Użytkownik może sprawdzić, czy wszystkie powyższe wymagania są spełnione na Twoim serwerze za pomocą tej phpinfo()
metody. Utwórz tymczasowy plik PHP i umieść w nim poniższą instrukcję.
Teraz uruchom ten plik PHP w przeglądarce, a zobaczysz konfiguracje PHP, takie jak wersja, rozszerzenia itp. Powinieneś zobaczyć, xmlreader
a zip
rozszerzenia są włączone, jak pokazano na zrzucie ekranu poniżej.
Po spełnieniu wymagań zainstaluj box/spout
pakiet za pomocą poniższego polecenia.
composer require box/spout
Odczytywanie i zapisywanie plików arkuszy kalkulacyjnych w PHP
Pakiet Spout pozwala na interakcję z plikami XLSX, CSV i ODS. Jako przykład piszę kod dla plików XLSX.
Utwórz przykładowy plik XLSX users.xlsx
w katalogu głównym i dodaj do niego kilka fikcyjnych wpisów. W moim przypadku plik ma poniżej wpisy.
Następnie napiszę w reader.php
pliku kod, który odczyta users.xlsx
i wydrukuje zawarte w nim dane.
czytnik.php
<?php
require_once 'vendor/autoload.php';
use BoxSpoutReaderCommonCreatorReaderEntityFactory;
$filePath = getcwd().'/users.xlsx';
$reader = ReaderEntityFactory::createReaderFromFile($filePath);
$reader->open($filePath);
foreach ($reader->getSheetIterator() as $sheet) {
foreach ($sheet->getRowIterator() as $row) {
$cells = $row->getCells();
foreach ($cells as $cell) {
echo $cell->getValue();
}
}
}
$reader->close();
To takie proste. Śmiało i spróbuj.
Z drugiej strony możemy łatwo stworzyć plik XLSX i zapisywać do niego dane. Stwórzmy plik writer.php
i dodajmy w nim kod poniżej.
pisarz.php
<?php
require_once 'vendor/autoload.php';
use BoxSpoutWriterCommonCreatorWriterEntityFactory;
use BoxSpoutCommonEntityRow;
$filePath = getcwd().'/new-users.xlsx';
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToFile($filePath);
// Here is data for XLSX file
$data = [
['Name', 'Email'],
['Steve', '[email protected]'],
['David', '[email protected]'],
];
foreach ($data as $d) {
$cells = [
WriterEntityFactory::createCell($d[0]),
WriterEntityFactory::createCell($d[1]),
];
$singleRow = WriterEntityFactory::createRow($cells);
$writer->addRow($singleRow);
}
$writer->close();
Powyższy kod tworzy new-users.xlsx
plik w katalogu głównym. Jeśli otworzysz ten plik, zobaczysz kilka wierszy (używanych w kodzie) wstawionych do niego.
W przypadku plików CSV i ODS należy utworzyć $writer
obiekt w następujący sposób.
$filePath = getcwd().'/new-users.ods';
$writer = WriterEntityFactory::createODSWriter();
$filePath = getcwd().'/new-users.csv';
$writer = WriterEntityFactory::createCSVWriter();
Mam nadzieję, że rozumiesz, jak czytać i pisać pliki arkuszy kalkulacyjnych w PHP. Chciałbym usłyszeć wasze przemyślenia i sugestie w sekcji komentarzy poniżej.
Powiązane artykuły
- Jak czytać pliki CSV i Excel w PHP za pomocą arkusza PHP?
- Jak wyeksportować dane bazy danych MySQL do programu Excel za pomocą PHP
- Jak przekonwertować HTML na PDF w PHP