2011-05-21 1 views
1

Gday, essentiellement ce que je fais est la création d'un fichier XML avec des informations Db. J'utilise PHP pour créer le fichier XML et le stocker sur le serveur. Je dois stocker le XML car il est basé sur une période spécifique. Je ne peux pas utiliser de bibliothèques ou de classes externes, je ne devrais pas en avoir besoin de toute façon, probablement erreur de code. Donc, voici l'en-tête XML généré et la structure de base, il a 6 feuilles au total.PHP fichier XML à l'aide stocké sur le serveur pour créer Excel pour télécharger

<?xml version="1.0" encoding="UTF-8"?> 
<?mso-application progid="Excel.Sheet"?> 
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:o="urn:schemas-microsoft-com:office:office" 
xmlns:x="urn:schemas-microsoft-com:office:excel" 
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:html="http://www.w3.org/TR/REC-html40"> 
<Worksheet ss:Name="Report Page 1"> 
<Table> 
<Row><Cell><Data ss:Type="String">col 1</Data></Cell><Cell><Data ss:Type="String">Col 2</Data></Cell></Row> 
</Table> 
</Worksheet> 

col 1col 2

Voici le PHP appelé à partir d'un lien

<?php 
$dir = "reports/xls/"; 
$filename = 'Summary.xml'; 
header("Content-type: application/vnd.ms-excel"); 
header("Content-Length: " . filesize($dir.$filename)); 
header("Content-Disposition: attachment; filename=$filename"); 
header("Expires: 0"); 
header("Cache-Control: private"); 
header("Pragma: cache"); 
    $Dfile = file_get_contents($dir.$filename); 
    print $Dfile; 
?> 

Tout ce que je reçois est un fichier Excel vierge avec sheet1 et aucune donnée. Si j'utilise la même technique mais génère le fichier à la volée, le rapport est superbe, toutes les données présentes. Des en-têtes PHP légèrement différents bien sûr.

header("Content-type: application/vnd.ms-excel"); 
header("Content-Length: " . strlen($excelxml)); 
header("Content-Disposition: attachment; filename={$excelxml}.xml"); 
header("Expires: 0"); 
header("Cache-Control: private"); 
header("Pragma: cache"); 
print $excelxml; 

$ excelxml est juste une chaîne contenant les données générées. Toute aide serait grandement appréciée, je ne pense pas que CSV est une option, je ne pense pas qu'il peut créer plusieurs feuilles de calcul. Je les en-têtes commenté Type de contenu/disposition pour regarder le code source et son même, sauf le code du fichier XML sur le serveur dispose d'un espace supplémentaire en haut, au-dessus.

Répondre

0
$dir = "reports/xls/"; 
$filename = 'Summary.xml'; 
if(!file_exists($dir.$filename)) die("Upload the file"); 

Ou regarder en-tête de réponse via Firebug ou d'une autre application pour loking:

"Content-Length: " . filesize($dir.$filename)) 

iF retrun 0 - fichier n'existe pas

+0

Il est toujours bon d'ajouter le contrôle d'erreur mais cela viendra plus tard. Je sais que le fichier existe, je n'arrive pas à comprendre pourquoi la feuille de calcul Excel est vide en essayant de télécharger. – Anthony

1

J'ai eu deux blocs PHP dans le premier fichier provoquant un problème d'espace blanc ou de saut de ligne.

0

essayer de fermer étiquette <Workbook> à la fin du script xml

Questions connexes