2012-07-19 2 views
0

J'essaye de créer un constructeur de description avec des données d'Excel. Je veux utiliser une valeur prédéfinie dans le modèle HTML et je veux mettre la valeur d'Excel à l'endroit où les valeurs prédéfinies apparaissent, par exemple.Lire le fichier Excel et mettre en HTML Modèle

<table> 
    <tr> 
    <td>ISBN</td> 
    <td>{ISBN}</td> 
    </tr> 
    <tr> 
    <td>Publisher</td> 
    <td>{Publisher}</td> 
    </tr> 
    <tr> 
    <td>Year</td> 
    <td>{Year}</td> 
    </tr> 
    <tr> 
    <td>About Book</td> 
    <td>{AboutBook}</td> 
    </tr> 
</table> 

Le modèle HTML peut être transmis à partir d'un fichier HTML physique ou d'une zone de texte. Je souhaite que le texte soit remplacé dans les accolades par les données Excel. Les en-têtes du fichier Excel sont les mêmes que les valeurs du modèle HTML mais le fichier Excel peut être modifié à chaque fois et ses en-têtes peuvent contenir plus de titres dans un fichier Excel dont seulement quelques-uns sont inclus dans le modèle HTML. J'utilise excelreader pour obtenir les données de fichier excel

for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) { 
    $xlshead[$j] = trim($data->sheets[0]['cells'][1][$j]); 
} 

foreach($xlshead as $hkey=>$hval) { 
     $row[$hkey] = trim($hval); 
    } 

Maintenant, j'ai le numéro de colonne dans les clés de ligne array $ et les rubriques du tableau $ row valeurs

J'utilise

for ($j = 1; $j <= $data->sheets[0]['numRows']-1; $j++) { 
     str_replace(array_valyes($row),$data->sheets[0]['cells'][$j+1][array_$keys($row)],$_POST['strhtmltemplate']) 
} 

Non je ne sais pas comment obtenir la clé exacte dans la fonction de remplacement. aidez-moi s'il vous plaît.

+0

Avez vous avez envisagé de l'exporter au format CSV et d'utiliser 'fgetcsv 'pour l'analyser? Ce serait plus simple – Martin

+0

merci Martin mais j'ai fait ça. J'ai remplacé les variables du fichier modèle par la chaîne de lecture Excel, par exemple. 'foreach ($ xlshead sous la forme $ hkey => $ hval) { \t \t $ row [' feuilles [0] [\' cells \ '] [$ j + 1] ['. $ hkey. ']; ?> '] = "{" .trim ($ hval). "}"; \t} ' et a écrit dans un fichier séparé que l'impression avec ob_start et récupéré le contenu dans un nouveau fichier et exporté dans Excel. La prochaine fois j'essaierai le fgetcsv comme dans ce projet il y a beaucoup de choses qui ne conviennent pas au format de csv car il contient des formules et d'autres choses aussi bien. donc nous devons exporter le fichier dans csv chaque fois .. merci –

Répondre

1

Voici le code complet je l'ai fait pour mon projet

$data = new Spreadsheet_Excel_Reader(); 
$filename = $_SESSION['filename']; 
$data->read(ROOT.$filename); 

$xlshead = array(); 

for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) { 
    $xlshead[$j] = trim($data->sheets[0]['cells'][1][$j]); 
} 

$TotalRecord = $data->sheets[0]['numRows']-1; 
$row = array(); 

foreach($xlshead as $hkey=>$hval) { 
    $row['<?php echo $data->sheets[0][\'cells\'][$j+1]['.$hkey.']; ?>'] = "{".trim($hval)."}"; 
} 

function _loadFile($filename) 
{ 
    $contents = ''; 
    if (file_exists($filename)) 
    { 
     ob_start(); 
     require_once $filename; 
     $contents = ob_get_contents(); 
     ob_end_clean(); 
    } 
    return $contents; 
} 

$datafile = session_id(); 
$writedata = ""; 

$writedata .= str_replace(array_values($row),array_keys($row),$_SESSION['template']); 

$myFile = $datafile.".php"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
fwrite($fh, $writedata); 
fclose($fh); 

$showdata = _loadFile("code.php"); 
$_SESSION['finaldata'] = $showdata; 

code.php

require_once 'Excel/reader.php'; 

$datafile = session_id(); 

if(isset($_SESSION['filename'])) { 
    $data = new Spreadsheet_Excel_Reader(); 
    $filename = $_SESSION['filename']; 
    $data->read(ROOT.$filename); 

    for ($j = 1; $j <= $data->sheets[0]['numRows']-1; $j++) { 
     include($datafile.".php"); 
     echo '--br--'; 
    } 
} 

Enfin exporter le fichier dans Excel

<?php 
session_start(); 
$filename ="Downloaded.xls"; 
header('Content-type: application/ms-excel'); 
header('Content-Disposition: attachment; filename='.$filename); 

$dataarr = explode("--br--",$_SESSION['finaldata']); 

?> 
<table> 
<?php 

$dataarr = explode("--br--",$_SESSION['finaldata']); 

foreach($dataarr as $res) { 
    echo "<tr><td>".htmlentities($res)."</td></tr>"; 
} 
?> 
</table> 
+0

au lieu de faire une réponse avec votre code, il vaut mieux simplement cliquer sur le bouton "modifier" sur votre réponse. – Killrawr

+0

désolé .. je suis nouveau dans SO .. gardera à l'esprit .. merci .. –