{"id":28180,"date":"2021-05-21T17:00:00","date_gmt":"2021-05-21T14:00:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28180"},"modified":"2021-10-18T03:43:13","modified_gmt":"2021-10-18T00:43:13","slug":"jak-czytac-plik-csv-i-excel-w-php-za-pomoca-arkusza-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-czytac-plik-csv-i-excel-w-php-za-pomoca-arkusza-php\/","title":{"rendered":"Jak czyta\u0107 plik CSV i Excel w PHP za pomoc\u0105 arkusza PHP?"},"content":{"rendered":"<p>Pracuj\u0105c nad aplikacjami webowymi czasami spotykamy si\u0119 z sytuacj\u0105, w kt\u00f3rej musimy zaimportowa\u0107 do bazy plik CSV lub Excel. Jest to preferowany spos\u00f3b importowania du\u017cych danych do bazy danych, zamiast wprowadzania ich pojedynczo.<\/p>\n<p><a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PhpSpreadsheet<\/a> to biblioteka, kt\u00f3ra pomaga czyta\u0107 plik CSV lub Excel. Biblioteka zapewnia obs\u0142ug\u0119 odczytu i zapisu r\u00f3\u017cnych typ\u00f3w format\u00f3w plik\u00f3w. Poni\u017cej znajduje si\u0119 zrzut ekranu obs\u0142ugiwanych format\u00f3w plik\u00f3w.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20521-6081ff1d2ea20.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-20521-6081ff1d2ea20.png\" alt=\"Jak czyta\u0107 plik CSV i Excel w PHP za pomoc\u0105 arkusza PHP?\" ><\/a><\/p>\n<p>Zanim pozna\u0142em t\u0119 bibliotek\u0119, do odczytu pliku CSV <a href=\"https:\/\/php.net\/manual\/en\/function.fgetcsv.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">u\u017cywa\u0142em<\/a> metody <a href=\"https:\/\/php.net\/manual\/en\/function.fgetcsv.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fgetcsv<\/a>. A w przypadku plik\u00f3w Excela musia\u0142em najpierw przekonwertowa\u0107 Excel do CSV, a nast\u0119pnie odczyta\u0107 go za pomoc\u0105 <code>fgetcsv()<\/code>funkcji.<\/p>\n<p>PhpSpreadsheet upraszcza to zadanie dla programist\u00f3w. Korzystaj\u0105c z PhpSpreadsheet, \u0142atwiej jest obs\u0142ugiwa\u0107 dane z plik\u00f3w CSV i Excel. Ponadto nie musisz konwertowa\u0107 programu Excel do CSV, aby go odczyta\u0107, biblioteka bezpo\u015brednio odczytuje plik Excel.<\/p>\n<p>Bior\u0105c to pod uwag\u0119, przyjrzyjmy si\u0119, jak czyta\u0107 pliki CSV i Excel za pomoc\u0105 PhpSpreadsheet.<\/p>\n<h3>Instalacja<\/h3>\n<p>Do instalacji tej biblioteki polecam skorzysta\u0107 z <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composera<\/a>. Otw\u00f3rz terminal w katalogu g\u0142\u00f3wnym projektu i uruchom polecenie:<\/p>\n<pre><code>composer require phpoffice\/phpspreadsheet<\/code><\/pre>\n<p>W dalszej cz\u0119\u015bci samouczka zamierzam odczyta\u0107 pliki CSV\/Excel i wstawi\u0107 ich dane do bazy danych. W tym celu stworzy\u0142em fikcyjny plik, kt\u00f3ry zawiera kolumny i dane w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20521-6081ff1d8f648.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-20521-6081ff1d8f648.png\" alt=\"Jak czyta\u0107 plik CSV i Excel w PHP za pomoc\u0105 arkusza PHP?\" ><\/a><\/p>\n<p>Aby przechowywa\u0107 te dane, utworzy\u0142em r\u00f3wnie\u017c tabel\u0119 \u201eusers&quot; w bazie danych.<\/p>\n<pre><code>CREATE TABLE `users` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`name` varchar(255) DEFAULT NULL,\n\u00a0`email` varchar(255) DEFAULT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;<\/code><\/pre>\n<p>Na potrzeby samouczka u\u017cywam powy\u017cszych danych fikcyjnych. U\u017cytkownik powinien zmieni\u0107 struktur\u0119 tabeli zgodnie ze swoim zestawem danych.<\/p>\n<p>Utw\u00f3rz <code>db.php<\/code>i dodaj w nim kod do po\u0142\u0105czenia z baz\u0105 danych.<\/p>\n<p><strong>db.php<\/strong><\/p>\n<pre><code>&lt;?php\n$db_host = 'DB_HOST';\n$db_username = 'DB_USERNAME';\n$db_password = 'DB_PASSWORD';\n$db_name = 'DB_NAME';\n\u00a0\u00a0\n$db = new mysqli($db_host, $db_username, $db_password, $db_name);\n\u00a0\u00a0\nif($db-&gt;connect_error){\n\u00a0\u00a0\u00a0\u00a0die(\"Unable to connect database: \". $db-&gt;connect_error);\n}<\/code><\/pre>\n<p>Pami\u0119taj, aby zast\u0105pi\u0107 symbole zast\u0119pcze rzeczywistymi warto\u015bciami.<\/p>\n<h3>Czytaj plik CSV\/Excel w PHP<\/h3>\n<p>Zr\u00f3bmy w\u0142a\u015bciwe kodowanie. Najpierw utw\u00f3rz formularz, kt\u00f3ry b\u0119dzie zawiera\u0142 plik wej\u015bciowy i przycisk przesy\u0142ania. U\u017cytkownik przesy\u0142a sw\u00f3j plik CSV\/Excel, naci\u015bnij przycisk przesy\u0142ania. Po przes\u0142aniu wpisy z przes\u0142anego pliku nale\u017cy umie\u015bci\u0107 w tabeli \u201eu\u017cytkownicy&#8221;.<\/p>\n<p><strong>formularz.php<\/strong><\/p>\n<pre><code>&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputFile\"&gt;File Upload&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"file\" class=\"form-control\" id=\"exampleInputFile\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" name=\"submit\" class=\"btn btn-primary\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Nast\u0119pnie kod, kt\u00f3ry zostanie wykonany po przes\u0142aniu b\u0119dzie nast\u0119puj\u0105cy.<\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\nrequire_once 'db.php';\n\u00a0\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetReaderCsv;\nuse PhpOfficePhpSpreadsheetReaderXlsx;\n\u00a0\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$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');\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0if(isset($_FILES['file']['name']) &amp;&amp; in_array($_FILES['file']['type'], $file_mimes)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_file = explode('.', $_FILES['file']['name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = end($arr_file);\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if('csv' == $extension) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$reader = new PhpOfficePhpSpreadsheetReaderCsv();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$reader = new PhpOfficePhpSpreadsheetReaderXlsx();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$spreadsheet = $reader-&gt;load($_FILES['file']['tmp_name']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$sheetData = $spreadsheet-&gt;getActiveSheet()-&gt;toArray();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (!empty($sheetData)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for ($i=1; $i&lt;count($sheetData); $i++) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$name = $sheetData[$i][1];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$email = $sheetData[$i][2];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;query(\"INSERT INTO USERS(name, email) VALUES('$name', '$email')\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;<\/code><\/pre>\n<p>W powy\u017cszym kodzie dowiaduj\u0119 si\u0119 o typie pliku i na tej podstawie czytam plik korzystaj\u0105c z funkcji udost\u0119pnianych przez bibliotek\u0119. Mo\u017cesz przeczyta\u0107 wi\u0119cej na ten temat w oficjalnej dokumentacji <a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\/topics\/reading-and-writing-to-file\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tutaj<\/a>.<\/p>\n<p>Mam nadziej\u0119, \u017ce rozumiesz, jak czyta\u0107 pliki CSV i Excel za pomoc\u0105 PhpSpreadsheet. 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-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\/przeslij-obraz-za-pomoca-bulletproof-library-w-php\/\" title=\"Prze\u015blij obraz za pomoc\u0105 kuloodpornej biblioteki w PHP\">Prze\u015blij obraz za pomoc\u0105 kuloodpornej biblioteki w PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-zezwolic-na-obsluge-svg-w-wordpress\/\" title=\"Jak zezwoli\u0107 na obs\u0142ug\u0119 SVG w WordPress\">Jak zezwoli\u0107 na obs\u0142ug\u0119 SVG w WordPress<\/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>W tym artykule dowiemy si\u0119, jak czyta\u0107 plik CSV i Excel w PHP? Do odczytania tych plik\u00f3w zalecamy skorzystanie z biblioteki PhpSpreadsheet, kt\u00f3ra umo\u017cliwia obs\u0142ug\u0119 support<\/p>\n","protected":false},"author":1,"featured_media":21909,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[277],"tags":[847],"class_list":["post-28180","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\/28180","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=28180"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28180\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21909"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}