[php] PHPExcel - Inlezen Excelbestanden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Beste tweakers,

Op mijn website wil ik een gedownload Excelbestand rechtstreeks inladen middels PHPExcel (https://phpexcel.codeplex.com/).

Het probleem is dat PHPExcel geen worksheets kan vinden in het Excelbestand.

Bij het openen van het bestand in Excel verschijnt onderstaande melding:

Afbeeldingslocatie: https://onya.khleuven.be/msoffice/Office2010Algemeen/images/beveiligde_weergave.gif

Op het moment dat ik bewerken inschakel en het bestand direct hierna opsla, kan het bestand wel ingelezen worden door middel van PHPExcel.

Ik heb beide versies gecontroleerd op mimetype. Bij de direct gedownloade versie is de mimetype 'application/zip'. Na het opnieuw opslaan van het bestand is de mimetype 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'.

Heeft iemand enig idee waar dit aan kan liggen? En hoe ik dit kan oplossen, zodat het niet verplicht is om het bestand eerst opnieuw op te slaan om het in te lezen met PHPExcel?

[ Voor 5% gewijzigd door radem205 op 21-05-2015 11:42 ]


Acties:
  • 0 Henk 'm!

  • Richh
  • Registratie: Augustus 2009
  • Laatst online: 09:13
De beveiligde weergave-balk verschijnt altijd als je download vanuit een internetlocatie, daar kan je niks aan doen. In principe is dat ook maar 1x klikken en klaar :) opnieuw op hoeven slaan zou niet nodig moeten zijn.
Maar opnieuw op moeten slaan, dat heb ik nog niet eerder gezien en ook niet meegemaakt, dus ik weet niet waar dat aan ligt.

Heb je dit op 1 systeem, of op meerdere systemen? En doet de meegeleverde tutorialcode hetzelfde? Op die manier kan je het vast debuggen.

☀️ 4500wp zuid | 🔋MT Venus 5kW | 🚗 Tesla Model 3 SR+ 2020 | ❄️ Daikin 3MXM 4kW


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Doordat je het bestand eerst opslaat, wordt het een lokaal bestand, dan is de bovenstaande beveiliging er niet. Overigens is bovenstaande functie in Excel zelf wel uit te schakelen, maar daar ben je niet mee geholpen. Wat zegt de documentatie van PHPExcel, heb je die al bekeken? Kijk ook even goed naar de requirements, wellicht mis je een module, waardoor het niet werkt.

[ Voor 25% gewijzigd door CH4OS op 21-05-2015 11:52 ]


Acties:
  • 0 Henk 'm!

  • Montaner
  • Registratie: Januari 2005
  • Laatst online: 01-09 08:19
Heb je al verschillende sheets/bronnen geprobeerd? Mogelijk dat het door de indeling komt van die ene bron...

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Ik heb het hele internet al afgezocht op zoek naar een antwoord, maar helaas kan ik geen vergelijkbare issues vinden.

Als debug code gebruik ik nu onderstaande:

code:
1
2
3
4
5
6
7
8
9
10
11
12
$file_name; // Is het bestand dat geupload is naar de server

$objReader = PHPExcel_IOFactory::createReaderForFile($file_name);
                    
$objReader->setReadDataOnly(true);

$objPHPExcel = $objReader->load($file_name);
                    
$worksheets = $objPHPExcel->getAllSheets();
                    
var_dump($worksheets);
exit();


Zonder het Excelbestand opnieuw op te slaan krijg ik een lege array retour.

Na het opnieuw opslaan wordt de worksheet herkend en krijg ik een gevulde array terug.

Beide bestanden (voor en na opnieuw opslaan) heb ik geopend in winrar en heb ik het bestand '[Content_Types].xml' geopend in een teksteditor. Hieronder de output:

Voor:
code:
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" />
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" /><Override PartName="/xl/worksheets/sheet.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" />
<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" /></Types>


Na:
code:
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/>
<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
<Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
<Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>
<Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/></Types>


Ik heb geen idee of het hier aan ligt, maar wellicht geeft dit jullie extra informatie.
trix0r schreef op donderdag 21 mei 2015 @ 11:53:
Heb je al verschillende sheets/bronnen geprobeerd? Mogelijk dat het door de indeling komt van die ene bron...
Ja, het probleem ontstaat bij verschillende gegenereerde Excelbestanden van verschillende bronnen.

[ Voor 5% gewijzigd door radem205 op 21-05-2015 11:56 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
radem205 schreef op donderdag 21 mei 2015 @ 11:55:
Ja, het probleem ontstaat bij verschillende gegenereerde Excelbestanden van verschillende bronnen.
Ik vermoed dat phpexcel iets minder vergevingsgezind is dan excel zelf als het gaat om imports en dat je gegenereerde bestanden gewoon niet voldoen aan wat phpexcel wil.

Maar ik zou als ik jou was kijken naar error-handling etc binnen phpexcel om te kijken of er niet na je load() instructie ergens een warning / error optreed die specifieker de foutmelding geeft dan simpelweg een lege array, oftewel gewoon debuggen.

Acties:
  • 0 Henk 'm!

  • Arjan90
  • Registratie: September 2005
  • Laatst online: 21-09 20:41
Misschien dat dit een open deur is, ik weet ook niet of je controle hebt over de Excel files zelf, maar waarom niet een CSV laten importeren? Dat lijkt me een prettiger format om te importeren dan Excel, omdat het veel meer een dataset is dan een Excel document. Excel documenten bestaan uit meerdere tabbladen, je moet dan elk tabblad controleren of het wel of niet voldoet aan wat jij verwacht, etc. Bij een CSV is dat veel simpeler en zal hierdoor de load veel minder zijn voor je server (daarnaast zijn CSV bestanden een stuk kleiner).

Bij CSV moet je echter wel erop letten dat de delimiter kan verschillen: een puntkomma (semicolon) of komma (comma). Naar mijn ervaring worden deze nogal eens door elkaar gebruikt (in Nederland gebruiken we bijv. puntkomma, maar ING spuugt een export van je bij- en afschrijvingen uit in een komma gescheiden bestand).

"Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid."


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Helaas heb ik geen controle over het formaat. De Excelbestanden worden gegenereerd uit verschillende software, waarbij het niet mogelijk is om csv te exporteren.

Acties:
  • 0 Henk 'm!

  • eM.
  • Registratie: Mei 2010
  • Laatst online: 13-09 14:03

eM.

Ik gok toch iets met bestandsrechten. Die melding heeft er wellicht helemaal niets mee te maken.
Wellicht veranderen de rechten op het moment dat je het bestand opnieuw opslaat.

Heb je de website/app lokaal draaien of ergens anders?
Hoe haal je het bestand binnen? Met php-curl of download je hem zelf?

[ Voor 56% gewijzigd door eM. op 21-05-2015 17:18 . Reden: aanvulling ]


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Het lijkt erop dat het een issue is binnen de scripting van PHPExcel. Het Excel bestand bevat namespaces wat PHPExcel momenteel niet ondersteund. Dat wordt dus in de scripting van PHPExcel duiken.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
radem205 schreef op donderdag 21 mei 2015 @ 19:25:
Het lijkt erop dat het een issue is binnen de scripting van PHPExcel. Het Excel bestand bevat namespaces wat PHPExcel momenteel niet ondersteund. Dat wordt dus in de scripting van PHPExcel duiken.
Persoonlijk zou ik toch eerst wat meer info over de pakketten die de bestanden genereren opvragen...

Je probleem klinkt me niet zo gek in de oren, maar meerdere pakketten die allemaal dezelfde namespaces gebruiken lijkt me ietwat apart, of het bevat allemaal dezelfde library (kan maar lijkt me niet direct 100% waarschijnlijk) of je hebt een kans dat een fix voor de ene een andere nog erger sloopt.
En in het laatste geval heb je een leuke uitdaging.

Persoonlijk zou ik dus eerst proberen een soort van inventarisatie te maken over welke generatielibrary's je het hebt zodat je het ietwat gestructureerd aan kan pakken ipv bestandje voor bestandje te gaan trial and error'en

Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Draai je PHP op Linux of op Windows? Op Windows kan het problemen geven met bestandstoegang als ie nog als unsafe gemarkeerd is.
Pagina: 1