Hallo
Momenteel ben ik bezig om via PHP data naar een XLS bestand te sturen. Ik gebruik deze code die werkende is.
Probleem is dat ik bij het openen een vervelende popup krijg met de melding :
De bestandsindeling en -extensie van *** komen niet overeen het bestand is mogelijk beschadigd of niet veilig.
Open het bestand alleen als u de bron vertrouwt. Wilt u het bestand toch openen?
Die popup krijg ik omdat ik tekst naar XLS omzet ( verklaring kwam ik tegen op Google )
Is er ook een manier om zonder die popup te werken? Export naar een CSV geeft geen popup ( is tekst )
Alle codes die ik probeer geven die popup - ik begin er stilaan voor te vrezen ...
Alvast bedankCode:$data = [ ["firstname" => "Mary", "lastname" => "Johnson", "age" => 25], ["firstname" => "Amanda", "lastname" => "Miller", "age" => 18], ["firstname" => "James", "lastname" => "Brown", "age" => 31] ]; function cleanData(&$str) { $str = preg_replace("/\t/", "\\t", $str); $str = preg_replace("/\r?\n/", "\\n", $str); if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"'; } $filename = "website_data_" . date('Ymd') . ".xls"; header("Content-Disposition: attachment; filename=\"$filename\""); header("Content-Type: application/vnd.ms-excel"); $flag = false; foreach($data as $row) { if(!$flag) { echo implode("\t", array_keys($row)) . "\r\n"; $flag = true; } array_walk($row, __NAMESPACE__ . '\cleanData'); echo implode("\t", array_values($row)) . "\r\n"; } exit;
Wesley
- PHP export naar XLS > vervelende popup
-
13-03-2018, 07:43 #1
- Berichten
- 940
- Lid sinds
- 15 Jaar
PHP export naar XLS > vervelende popup
-
-
13-03-2018, 08:27 #2
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: PHP export naar XLS > vervelende popup
Bij mijn weten is XLS een binair bestandsformaat wat nogal wat ingewikkelder is dan een CSV-bestand om uit te schrijven.
Wat je hier eigenlijk doet is een bestand uitschrijven in plain text, wat Excel niet als een XLS bestand laadt maar gewoon als een CSV. Daarom krijg je eerst die waarschuwing. Dat het bestand daarna alsnog geladen wordt zet je waarschijnlijk op het verkeerde been, het doet je vermoeden dat je gewoon een correct XLS-bestand hebt aangeboden, maar eigenlijk is het dus tabeldata in plain text.
Oplossing 1: gewoon als CSV opslaan.
Oplossing 2: op zoek gaan naar een PHP library die een echte XLS kan uitschrijven.
-
13-03-2018, 09:31 #3
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: PHP export naar XLS > vervelende popup
Ik ben aan het overwegen om deze 2 te gebruiken.
Op die manier kan ik ze beiden downloaden ... wat denkt u ?
XLS : http://www.zedwood.com/article/gener...files-with-php
CSV : http://www.zedwood.com/article/gener...sheet-with-php
-
13-03-2018, 10:25 #4
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: PHP export naar XLS > vervelende popup
Als XLSX-bestanden ook een optie zijn, dan zou ik daar zelf eerst mee experimenteren, bijvoorbeeld met deze library:
https://github.com/mk-j/PHP_XLSXWriter
XLSX-bestanden zijn een variatie op XLS-bestanden op basis van ingezipte XML-bestanden die gebruik maken van OpenXML. Hernoem een XLSX bestand maar eens naar ZIP en open het, je zult er XML in vinden.
Bestanden in DOCX en XLSX zijn volgens mij tegenwoordig wel een beetje de standaard als je iets naar andere mensen verstuurt, dus tenzij je echt heel graag oudere versies van Excel zonder gedoe wilt ondersteunen en dus XLS nodig hebt zou ik gewoon XLSX doen met bovenstaande library.
Dit zou sowieso mijn eigen voorkeur hebben omdat het veel makkelijker te troubleshooten is als er een keer iets mis gaat, maar ik weet natuurlijk niet de exacte specificaties en eisen van je project. En ik heb er verder ook geen praktijkervaring mee hoor, maar als ik ergens moest beginnen was het daar :)
Qua CSV: de pagina waar je naar linkt is al vrij oud en er zijn volgens mij in de tussentijd in PHP wat standaardfuncties bijgekomen waar je zo mee aan de slag kunt, zoals bijvoorbeeld met fputcsv() en dan bijvoorbeeld op deze manier voor jouw eigen doel.Laatst aangepast door Tjerk de Heer : 13-03-2018 om 10:33
-
13-03-2018, 11:10 #5
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: PHP export naar XLS > vervelende popup
Over de csv
Uw voorbeeld is inderdaad veel eenvoudiger te gebruiken!
Dit heb ik werkende en zal het zo invoegen. Lekker eenvoudig, bedankt!
Over de xlsx
Omdat er verschillende mensen mijn systeem gaan gebruiken dacht ik om xls te gebruiken boven xlsx. Na even Google'en zag ik dat dit vanaf Office 2007 ingebouwd zit. Een percentage van ondersteuning vond ik niet dadelijk maar de meerderheid zal waarschijnlijk wel xlsx ondersteunen denk ik dan.
Het enige wat ik bij XLSXWriter niet dadelijk kan vinden is de popup om het bestand te openen.
Ik krijgt het wel onmiddellijk gedownload zoals het voorbeeld maar een keuze tot openen zie ik niet dadelijk?
In de voorbeelden zie ik wel iets van $writer->writeToStdOut(); en echo $writer->writeToString(); maar dat is het niet?
Bedankt voor uw feedback !Laatst aangepast door WesleyVN : 13-03-2018 om 11:20
-
13-03-2018, 12:46 #6
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: PHP export naar XLS > vervelende popup
Waarschijnlijk kun je dat doen door eerst de juiste headers in te stellen voor je writeToStdOut() aanroept. Het gaat dan vooral om:
PHP Code:header('Content-disposition: attachment; filename='.$filename);
-
13-03-2018, 12:57 #7
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: PHP export naar XLS > vervelende popup
Dat is alvast gelukt ! Nu alles wat opkuisen en klaar, bedankt !
Ik lees wel dat XLSX een probleem is voor Open Office ... houdt u daar zelf rekening mee ?
-
13-03-2018, 14:08 #8
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: PHP export naar XLS > vervelende popup
Mooi, fijn dat het gelukt is.
Open Office gebruikers zou je kunnen adviseren gewoon het CSV-bestand te openen, maar er lijken ook nog wel wat libraries rond te zweven om meteen een ODS bestand uit te kunnen schrijven naast je CSV en XLSX. Dus als het CSV-bestand toch problematisch blijkt zou je dat nog kunnen toevoegen.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic