{"id":29522,"date":"2021-06-17T12:27:00","date_gmt":"2021-06-17T09:27:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29522"},"modified":"2021-10-18T03:31:49","modified_gmt":"2021-10-18T00:31:49","slug":"jak-czytac-i-zapisywac-pliki-arkuszy-kalkulacyjnych-w-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-czytac-i-zapisywac-pliki-arkuszy-kalkulacyjnych-w-php\/","title":{"rendered":"Jak czyta\u0107 i zapisywa\u0107 pliki arkuszy kalkulacyjnych w PHP"},"content":{"rendered":"<p>Podczas pracy nad aplikacjami webowymi cz\u0119sto spotykamy si\u0119 z sytuacj\u0105, w kt\u00f3rej musimy pobawi\u0107 si\u0119 plikami arkusza kalkulacyjnego. Mo\u017cemy chcie\u0107 odczyta\u0107 dane z arkuszy kalkulacyjnych i je przetworzy\u0107. Czasami wymagane jest r\u00f3wnie\u017c tworzenie i zapisywanie plik\u00f3w arkuszy kalkulacyjnych.<\/p>\n<p>W tym artykule dowiemy si\u0119, jak czyta\u0107 i pisa\u0107 pliki arkuszy kalkulacyjnych w PHP. Kod, kt\u00f3ry wyja\u015bnimy, b\u0119dzie dzia\u0142a\u0142 na 3 typach arkuszy kalkulacyjnych \u2013 CSV, XLSX i ODS.<\/p>\n<h3>Pierwsze kroki<\/h3>\n<p>Jako programista chcia\u0142bym poeksperymentowa\u0107 z r\u00f3\u017cnymi pakietami, kt\u00f3re mog\u0105 by\u0107 pomocne w rozwi\u0105zywaniu rzeczywistych problem\u00f3w. Ostatnio natkn\u0105\u0142em si\u0119 na paczk\u0119 o nazwie <a href=\"https:\/\/github.com\/box\/spout\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">box\/sout<\/a>. Podoba\u0142 mi si\u0119 spos\u00f3b, w jaki biblioteka wykonywa\u0142a zadania. Korzystaj\u0105c z tej biblioteki, mo\u017cesz przetwarza\u0107 pliki arkuszy kalkulacyjnych za pomoc\u0105 zaledwie kilku wierszy kodu.<\/p>\n<p>Ta biblioteka jest w stanie przetwarza\u0107 pliki o dowolnym rozmiarze. Mo\u017cliwe, \u017ce masz do czynienia z du\u017cym plikiem. Podczas tego procesu du\u017cy plik nie powinien zu\u017cywa\u0107 pami\u0119ci i powodowa\u0107 problemy z wydajno\u015bci\u0105. Biblioteka wylewek rozwi\u0105zuje ten problem. Potrzebuje tylko 3 MB pami\u0119ci do przetworzenia dowolnego pliku.<\/p>\n<p>Zanim zaczniesz, Tw\u00f3j serwer powinien spe\u0142ni\u0107 poni\u017csze wymagania.<\/p>\n<ul>\n<li>PHP w wersji 7.2 lub nowszej<\/li>\n<li>Rozszerzenie PHP <code>php_zip<\/code>w\u0142\u0105czone<\/li>\n<li>Rozszerzenie PHP <code>php_xmlreader<\/code>w\u0142\u0105czone<\/li>\n<\/ul>\n<p>U\u017cytkownik mo\u017ce sprawdzi\u0107, czy wszystkie powy\u017csze wymagania s\u0105 spe\u0142nione na Twoim serwerze za pomoc\u0105 tej <code>phpinfo()<\/code>metody. Utw\u00f3rz tymczasowy plik PHP i umie\u015b\u0107 w nim poni\u017csz\u0105 instrukcj\u0119.<\/p>\n<p>Teraz uruchom ten plik PHP w przegl\u0105darce, a zobaczysz konfiguracje PHP, takie jak wersja, rozszerzenia itp. Powiniene\u015b zobaczy\u0107, <code>xmlreader<\/code>a <code>zip<\/code>rozszerzenia s\u0105 w\u0142\u0105czone, jak pokazano na zrzucie ekranu poni\u017cej.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20182-6081c957ae160.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20182-6081c957ae160.png\" alt=\"Jak czyta\u0107 i zapisywa\u0107 pliki arkuszy kalkulacyjnych w PHP\" ><\/a><\/p>\n<p>Po spe\u0142nieniu wymaga\u0144 zainstaluj <code>box\/spout<\/code>pakiet za pomoc\u0105 poni\u017cszego polecenia.<\/p>\n<pre><code>composer require box\/spout<\/code><\/pre>\n<h3>Odczytywanie i zapisywanie plik\u00f3w arkuszy kalkulacyjnych w PHP<\/h3>\n<p>Pakiet Spout pozwala na interakcj\u0119 z plikami XLSX, CSV i ODS. Jako przyk\u0142ad pisz\u0119 kod dla plik\u00f3w XLSX.<\/p>\n<p>Utw\u00f3rz przyk\u0142adowy plik XLSX <code>users.xlsx<\/code>w katalogu g\u0142\u00f3wnym i dodaj do niego kilka fikcyjnych wpis\u00f3w. W moim przypadku plik ma poni\u017cej wpisy.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20182-6081c95872223.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20182-6081c95872223.png\" alt=\"Jak czyta\u0107 i zapisywa\u0107 pliki arkuszy kalkulacyjnych w PHP\" ><\/a><\/p>\n<p>Nast\u0119pnie napisz\u0119 w <code>reader.php<\/code>pliku kod, kt\u00f3ry odczyta <code>users.xlsx<\/code>i wydrukuje zawarte w nim dane.<\/p>\n<p><strong>czytnik.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\n\u00a0\nuse BoxSpoutReaderCommonCreatorReaderEntityFactory;\n\u00a0\n$filePath = getcwd().'\/users.xlsx';\n\u00a0\n$reader = ReaderEntityFactory::createReaderFromFile($filePath);\n\u00a0\n$reader-&gt;open($filePath);\n\u00a0\nforeach ($reader-&gt;getSheetIterator() as $sheet) {\n\u00a0\u00a0\u00a0\u00a0foreach ($sheet-&gt;getRowIterator() as $row) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$cells = $row-&gt;getCells();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0foreach ($cells as $cell) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $cell-&gt;getValue();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$reader-&gt;close();<\/code><\/pre>\n<p>To takie proste. \u015amia\u0142o i spr\u00f3buj.<\/p>\n<p>Z drugiej strony mo\u017cemy \u0142atwo stworzy\u0107 plik XLSX i zapisywa\u0107 do niego dane. Stw\u00f3rzmy plik <code>writer.php<\/code>i dodajmy w nim kod poni\u017cej.<\/p>\n<p><strong>pisarz.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\n\u00a0\nuse BoxSpoutWriterCommonCreatorWriterEntityFactory;\nuse BoxSpoutCommonEntityRow;\n\u00a0\n$filePath = getcwd().'\/new-users.xlsx';\n\u00a0\n$writer = WriterEntityFactory::createXLSXWriter();\n\u00a0\n$writer-&gt;openToFile($filePath);\n\u00a0\n\/\/ Here is data for XLSX file\n$data = [\n\u00a0\u00a0\u00a0\u00a0['Name', 'Email'],\n\u00a0\u00a0\u00a0\u00a0['Steve', 'steve@test.com'],\n\u00a0\u00a0\u00a0\u00a0['David', 'david@test.com'],\n];\n\u00a0\nforeach ($data as $d) {\n\u00a0\u00a0\u00a0\u00a0$cells = [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0WriterEntityFactory::createCell($d[0]),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0WriterEntityFactory::createCell($d[1]),\n\u00a0\u00a0\u00a0\u00a0];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$singleRow = WriterEntityFactory::createRow($cells);\n\u00a0\u00a0\u00a0\u00a0$writer-&gt;addRow($singleRow);\n}\n\u00a0\n$writer-&gt;close();<\/code><\/pre>\n<p>Powy\u017cszy kod tworzy <code>new-users.xlsx<\/code>plik w katalogu g\u0142\u00f3wnym. Je\u015bli otworzysz ten plik, zobaczysz kilka wierszy (u\u017cywanych w kodzie) wstawionych do niego.<\/p>\n<p>W przypadku plik\u00f3w CSV i ODS nale\u017cy utworzy\u0107 <code>$writer<\/code>obiekt w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>$filePath = getcwd().'\/new-users.ods';\n$writer = WriterEntityFactory::createODSWriter();\n\u00a0\n$filePath = getcwd().'\/new-users.csv';\n$writer = WriterEntityFactory::createCSVWriter();<\/code><\/pre>\n<p>Mam nadziej\u0119, \u017ce rozumiesz, jak czyta\u0107 i pisa\u0107 pliki arkuszy kalkulacyjnych w PHP. Chcia\u0142bym us\u0142ysze\u0107 wasze przemy\u015blenia i sugestie w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-czytac-plik-csv-i-excel-w-php-za-pomoca-arkusza-php\/\" title=\"Jak czyta\u0107 pliki CSV i Excel w PHP za pomoc\u0105 arkusza PHP?\">Jak czyta\u0107 pliki CSV i Excel w PHP za pomoc\u0105 arkusza PHP?<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-wyeksportowac-dane-bazy-danych-mysql-do-programu-excel-za-pomoca-php\/\" title=\"Jak wyeksportowa\u0107 dane bazy danych MySQL do programu Excel za pomoc\u0105 PHP\">Jak wyeksportowa\u0107 dane bazy danych MySQL do programu Excel za pomoc\u0105 PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przekonwertowac-html-na-pdf-w-php\/\" title=\"Jak przekonwertowa\u0107 HTML na PDF w PHP\">Jak przekonwertowa\u0107 HTML na PDF w PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czy chcesz wiedzie\u0107, jak czyta\u0107 i pisa\u0107 pliki arkuszy kalkulacyjnych w PHP? W tym artykule dowiemy si\u0119, jak wchodzi\u0107 w interakcj\u0119 z plikami arkuszy kalkulacyjnych za pomoc\u0105<\/p>\n","protected":false},"author":1,"featured_media":20183,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[277],"tags":[847],"class_list":["post-29522","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29522","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=29522"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29522\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/20183"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=29522"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=29522"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=29522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}