{"id":24772,"date":"2021-05-25T11:33:00","date_gmt":"2021-05-25T08:33:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24772"},"modified":"2021-10-17T20:40:38","modified_gmt":"2021-10-17T17:40:38","slug":"kuinka-vieda-mysql-tietokantatiedot-exceliin-php-n-avulla","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fi\/kuinka-vieda-mysql-tietokantatiedot-exceliin-php-n-avulla\/","title":{"rendered":"Kuinka vied\u00e4 MySQL-tietokantatiedot Exceliin PHP: n avulla"},"content":{"rendered":"<p>\u00c4skett\u00e4in julkaisin artikkelin <a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-lukea-csv-ja-excel-tiedostoja-php-ssa-phpspreadsheetin-avulla\/\" title=\"CSV- ja Excel-tiedostojen lukeminen PHP: ss\u00e4 PhpSpreadsheet-sovelluksen avulla\" >CSV- ja Excel-tiedostojen lukeminen PHP: ss\u00e4 PhpSpreadsheet-sovelluksen avulla<\/a> ja yksi lukijoista kysyi MySQL-tietokantatietueiden viemisest\u00e4 Excel-tiedostoon. K\u00e4ytt\u00e4j\u00e4 saattaa tarvita tietojaan Excel- tai CSV-tiedostossa, jotta h\u00e4n voi lukea tai jakaa ne helposti. T\u00e4ss\u00e4 artikkelissa keskusteltiin siit\u00e4, kuinka tietoja voidaan vied\u00e4 tietokannasta Excel- ja CSV-tiedostoihin. T\u00e4m\u00e4n lis\u00e4ksi tutkitaan, kuinka t\u00e4m\u00e4 viety tiedosto voidaan l\u00e4hett\u00e4\u00e4 s\u00e4hk\u00f6postin liitteen\u00e4.<\/p>\n<h3>P\u00e4\u00e4st\u00e4 alkuun<\/h3>\n<p>Aloittamiseksi sinun on ensin asennettava <a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PhpSpreadsheet-<\/a> kirjasto. Suosittelen, ett\u00e4 kirjaston asennukseen k\u00e4ytet\u00e4\u00e4n <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composeria<\/a>. Avaa p\u00e4\u00e4te projektin juurihakemistossa ja suorita komento:<\/p>\n<pre><code>composer require phpoffice\/phpspreadsheet<\/code><\/pre>\n<p>PhpSpreadsheet on kirjasto, joka tukee erityyppisten tiedostomuotojen lukemista ja kirjoittamista. Alla on kuvakaappaus tuetuista tiedostomuodoista.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20480-6081f88658855.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-20480-6081f88658855.png\" alt=\"Kuinka vied\u00e4 MySQL-tietokantatiedot Exceliin PHP: n avulla\" ><\/a><\/p>\n<p>Tavoitteenamme on vied\u00e4 tietokantataulukoiden tietueet Excel \/ CSV-tiedostoihin. Otan &quot;tuotteet&quot; -taulukon esimerkkin\u00e4. Luodaan taulukko &#8217;tuotteet&#8217; tietokantaan suorittamalla alla oleva kysely.<\/p>\n<pre><code>CREATE TABLE `products` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`product_name` varchar(255) NOT NULL,\n\u00a0`product_sku` varchar(255) NOT NULL,\n\u00a0`product_price` varchar(255) NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;<\/code><\/pre>\n<p>Lis\u00e4\u00e4 seuraavaksi joitain nuken merkint\u00f6j\u00e4 taulukkoon, jotta n\u00e4et muutaman tietueen viedyss\u00e4 tiedostossa.<\/p>\n<pre><code>INSERT INTO `products` (`id`, `product_name`, `product_sku`, `product_price`) VALUES\n(1, 'Apple', 'app_111', '$1000'),\n(2, 'Lenovo', 'len_222', '$999'),\n(3, 'Samsung', 'sam_689', '$1200'),\n(4, 'Acer', 'ace_620', '$900');<\/code><\/pre>\n<p>T\u00e4m\u00e4n j\u00e4lkeen luo <code>db.php<\/code>tiedosto, johon kirjoitamme tietokantayhteyden.<\/p>\n<p><strong>db.php<\/strong><\/p>\n<pre><code>&lt;?php\n$db_host = 'DATABASE_HOST';\n$db_username = 'DATABASE_USERNAME';\n$db_password = 'DATABASE_PASSWORD';\n$db_name = 'DATABASE_NAME';\n\u00a0\n$db = new mysqli($db_host, $db_username, $db_password, $db_name);\n\u00a0\nif($db-&gt;connect_error){\n\u00a0\u00a0\u00a0\u00a0die(\"Unable to connect database: \". $db-&gt;connect_error);\n}<\/code><\/pre>\n<p>Muista korvata paikkamerkit todellisilla arvoilla yll\u00e4 olevassa koodissa. Opetusohjelman seuraavassa osassa jaon erillisen osan tietojen viemisest\u00e4 Exceliin, CSV: hen ja s\u00e4hk\u00f6postin l\u00e4hett\u00e4miseen viedyn tiedoston liitteen\u00e4.<\/p>\n<h3>Vie MySQL-tietokantatiedot Exceliin PHP: n avulla<\/h3>\n<p>Olet asentanut kirjaston ja olet valmis tietokantataulukkoon, jossa on nuken merkinn\u00e4t. Nyt voit menn\u00e4 eteenp\u00e4in ja kirjoittaa todellisen koodin, joka vie Excel-tiedoston, jossa on t\u00e4ytetyt tiedot.<\/p>\n<p>Luo <code>index.php<\/code>tiedosto juurihakemistoon. Kirjoitan t\u00e4h\u00e4n tiedostoon SELECT-kyselyn hakemaan tietoja tietokannasta, kirjoitan n\u00e4m\u00e4 tiedot Exceliin ja lopuksi saamaan ne lataamaan automaattisesti.<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\nrequire_once \"db.php\";\n\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetWriterXlsx;\n\u00a0\n$spreadsheet = new Spreadsheet();\n$Excel_writer = new Xlsx($spreadsheet);\n\u00a0\n$spreadsheet-&gt;setActiveSheetIndex(0);\n$activeSheet = $spreadsheet-&gt;getActiveSheet();\n\u00a0\n$activeSheet-&gt;setCellValue('A1', 'Product Name');\n$activeSheet-&gt;setCellValue('B1', 'Product SKU');\n$activeSheet-&gt;setCellValue('C1', 'Product Price');\n\u00a0\n$query = $db-&gt;query(\"SELECT * FROM products ORDER BY id DESC\");\n\u00a0\nif($query-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0$i = 2;\n\u00a0\u00a0\u00a0\u00a0while($row = $query-&gt;fetch_assoc()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('A'.$i, $row['product_name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('B'.$i, $row['product_sku']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('C'.$i, $row['product_price']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$i++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$filename = 'products.xlsx';\n\u00a0\nheader('Content-Type: application\/vnd.ms-excel');\nheader('Content-Disposition: attachment;filename='. $filename);\nheader('Cache-Control: max-age=0');\n$Excel_writer-&gt;save('php:\/\/output');<\/code><\/pre>\n<p>Kun suoritat t\u00e4m\u00e4n PHP-tiedoston selaimessa, Excel-tiedosto alkaa ladata automaattisesti ja t\u00e4ll\u00e4 Excel-taulukolla on seuraava tulos.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20480-6081f88658855.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-20480-6081f88658855.png\" alt=\"Kuinka vied\u00e4 MySQL-tietokantatiedot Exceliin PHP: n avulla\" ><\/a><\/p>\n<h3>Vie MySQL-tietokantatiedot CSV-muotoon PHP: n avulla<\/h3>\n<p>Edellisess\u00e4 osassa vietiin tietoja Excel-tiedostoon. Jos joku haluaa vied\u00e4 tietoja CSV-tiedostona, sinun on muutettava muutama rivi yll\u00e4 olevassa koodissa.<\/p>\n<p><strong>csv.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\nrequire_once \"db.php\";\n\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetWriterCsv;\n\u00a0\n$spreadsheet = new Spreadsheet();\n$Excel_writer = new Csv($spreadsheet);\n\u00a0\n$spreadsheet-&gt;setActiveSheetIndex(0);\n$activeSheet = $spreadsheet-&gt;getActiveSheet();\n\u00a0\n$activeSheet-&gt;setCellValue('A1', 'Product Name');\n$activeSheet-&gt;setCellValue('B1', 'Product SKU');\n$activeSheet-&gt;setCellValue('C1', 'Product Price');\n\u00a0\n$query = $db-&gt;query(\"SELECT * FROM products ORDER BY id DESC\");\n\u00a0\nif($query-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0$i = 2;\n\u00a0\u00a0\u00a0\u00a0while($row = $query-&gt;fetch_assoc()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('A'.$i, $row['product_name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('B'.$i, $row['product_sku']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('C'.$i, $row['product_price']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$i++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$filename = 'products.csv';\n\u00a0\nheader('Content-Type: application\/text-csv');\nheader('Content-Disposition: attachment;filename='. $filename);\nheader('Cache-Control: max-age=0');\n$Excel_writer-&gt;save('php:\/\/output');<\/code><\/pre>\n<h3>L\u00e4het\u00e4 s\u00e4hk\u00f6postiviesti tiedostona liitteen\u00e4<\/h3>\n<p>Toistaiseksi t\u00e4ss\u00e4 artikkelissa olemme n\u00e4hneet, miten tiedosto ladataan CSV- ja Excel-muodossa. Jotkut k\u00e4ytt\u00e4j\u00e4t saattavat haluta l\u00e4hett\u00e4\u00e4 viedyn tiedoston s\u00e4hk\u00f6postin liitteen\u00e4. Katsotaanpa, miten se saavutetaan.<\/p>\n<p>Asenna ensin <a href=\"https:\/\/github.com\/PHPMailer\/PHPMailer\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPMailer-<\/a> kirjasto komennolla:<\/p>\n<pre><code>composer require phpmailer\/phpmailer<\/code><\/pre>\n<p>Kun olet asentanut kirjaston, voit l\u00e4hett\u00e4\u00e4 s\u00e4hk\u00f6postia mill\u00e4 tahansa SMTP-palvelimella. Se on sinusta kiinni. Voit k\u00e4ytt\u00e4\u00e4 is\u00e4nn\u00f6im\u00e4\u00e4si SMTP-palvelinta, AWS SES -palvelua tai Gmailin SMTP-palvelinta. Jos aiot k\u00e4ytt\u00e4\u00e4 Gmailin SMTP-palvelinta, lue artikkeli <a href=\"https:\/\/themewp.inform.click\/fi\/laheta-sahkopostia-kayttamalla-gmailin-smtp-palvelinta-php-komentosarjalta\/\" title=\"L\u00e4het\u00e4 s\u00e4hk\u00f6postia Gmailin SMTP-palvelimen avulla PHP-komentosarjalta,\">L\u00e4het\u00e4 s\u00e4hk\u00f6postia Gmailin SMTP-palvelimen avulla PHP-komentosarjalta,<\/a> jossa selitet\u00e4\u00e4n sen m\u00e4\u00e4ritykset.<\/p>\n<p>Aikaisemmin kirjoitettu koodi lataa tiedoston automaattisesti. Mutta nyt sen sijaan, ett\u00e4 tekisimme sen ladattavaksi, tallennamme tiedoston hakemistoon ja l\u00e4het\u00e4mme sen sitten liitteen\u00e4. Lyhyesti sanottuna meill\u00e4 on alla oleva koodi tiedoston tallentamiseen.<\/p>\n<pre><code>...\n$filename = 'products.csv';\n\u00a0\nif (!file_exists('files')) {\n\u00a0\u00a0\u00a0\u00a0mkdir('files', 0755);\n}\n$Excel_writer-&gt;save('files\/'.$filename);<\/code><\/pre>\n<p>Viimeinen koodi l\u00e4hett\u00e4\u00e4ksesi liitteen s\u00e4hk\u00f6postitse on seuraava:<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\nrequire_once \"db.php\";\n\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetWriterCsv;\n\u00a0\n\/\/Import PHPMailer classes into the global namespace\nuse PHPMailerPHPMailerPHPMailer;\nuse PHPMailerPHPMailerException;\n\u00a0\n$spreadsheet = new Spreadsheet();\n$Excel_writer = new Csv($spreadsheet);\n\u00a0\n$spreadsheet-&gt;setActiveSheetIndex(0);\n$activeSheet = $spreadsheet-&gt;getActiveSheet();\n\u00a0\n$activeSheet-&gt;setCellValue('A1', 'Product Name');\n$activeSheet-&gt;setCellValue('B1', 'Product SKU');\n$activeSheet-&gt;setCellValue('C1', 'Product Price');\n\u00a0\n$query = $db-&gt;query(\"SELECT * FROM products ORDER BY id DESC\");\n\u00a0\nif($query-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0$i = 2;\n\u00a0\u00a0\u00a0\u00a0while($row = $query-&gt;fetch_assoc()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('A'.$i, $row['product_name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('B'.$i, $row['product_sku']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('C'.$i, $row['product_price']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$i++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$filename = 'products.csv';\n\u00a0\nif (!file_exists('files')) {\n\u00a0\u00a0\u00a0\u00a0mkdir('files', 0755);\n}\n$Excel_writer-&gt;save('files\/'.$filename);\n\u00a0\n\/\/ send as an attachment\n$mail = new PHPMailer(true);\ntry {\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;isSMTP();\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Host = 'SMTP_HOST';\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;SMTPAuth = true;\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Username = 'SMTP_USERNAME';\u00a0\u00a0 \/\/username\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Password = 'SMTP_PASSWORD';\u00a0\u00a0 \/\/password\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;SMTPSecure = 'ssl';\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Port = 465;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;setFrom('FROM_EMAIL_ADDRESS', 'FROM_NAME');\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;addAddress('RECEPIENT_EMAIL_ADDRESS', 'RECEPIENT_NAME');\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;addAttachment('files\/'.$filename);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;isHTML(true);\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Subject = 'Our Exported File';\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Body\u00a0\u00a0\u00a0 = 'Our Exported File';\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;send();\n\u00a0\u00a0\u00a0\u00a0echo 'Message has been sent';\n} catch (Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo 'Message could not be sent. Mailer Error: '. $mail-&gt;ErrorInfo;\n}<\/code><\/pre>\n<p>Korvaa paikkamerkit todellisilla arvoilla, ja s\u00e4hk\u00f6posti l\u00e4hetet\u00e4\u00e4n liitteen\u00e4 vastaanottajan s\u00e4hk\u00f6postiosoitteeseen.<\/p>\n<p>Toivon, ett\u00e4 ymm\u00e4rr\u00e4t kuinka vied\u00e4 MySQL-tietokantatietueet Excel- tai CSV-tiedostoon ja l\u00e4hett\u00e4\u00e4 se my\u00f6s liitteen\u00e4. Jaa ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.<\/p>\n<h4>Aiheeseen liittyv\u00e4t artikkelit<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-siirtaa-tiedostoja-etapalvelimelle-php-ssa\/\" title=\"Kuinka siirt\u00e4\u00e4 tiedostoja et\u00e4palvelimelle PHP: ss\u00e4\">Kuinka siirt\u00e4\u00e4 tiedostoja et\u00e4palvelimelle PHP: ss\u00e4<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/laheta-sahkopostia-kayttamalla-php-n-mailjet-ohjelmaa-vaihtoehto-gmailin-smtp-palvelimelle\/\" title=\"L\u00e4het\u00e4 s\u00e4hk\u00f6postia k\u00e4ytt\u00e4m\u00e4ll\u00e4 PHP: n Mailjet-ohjelmaa (vaihtoehto Gmailin SMTP-palvelimelle)\">L\u00e4het\u00e4 s\u00e4hk\u00f6postia k\u00e4ytt\u00e4m\u00e4ll\u00e4 PHP: n Mailjet-ohjelmaa (vaihtoehto Gmailin SMTP-palvelimelle)<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-muuntaa-html-tiedosto-pdf-muotoon-php-ssa\/\" title=\"Kuinka muuntaa HTML-tiedosto PDF-muotoon PHP: ss\u00e4\">Kuinka muuntaa HTML-tiedosto PDF-muotoon PHP: ss\u00e4<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Haluatko vied\u00e4 MySQL-tietokantatiedot Exceliin PHP: ll\u00e4? T\u00e4ss\u00e4 artikkelissa n\u00e4yt\u00e4mme, kuinka tietoja voidaan helposti vied\u00e4 excel-tiedostoihin mimumum-koodilla<\/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":[275],"tags":[843],"class_list":["post-24772","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-6","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24772","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/comments?post=24772"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24772\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media\/21909"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media?parent=24772"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/categories?post=24772"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/tags?post=24772"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}