9
votes

PHP Créez une feuille de calcul Excel, puis envoyez-la comme une pièce jointe

J'utilise le code suivant: xxx

C'est ce que j'appelle lorsque l'utilisateur frappe un bouton Soumettre. Mais ce que je suis intéressé à faire est d'envoyer une feuille de calcul Excel comme pièce jointe. Donc, dans ce fichier ci-dessous, je vous connecterais à une base de données, sélectionnez Résultats et créez la feuille de calcul, puis envoyez-la comme une pièce jointe. Est-ce que cela est possible en modifiant le code ci-dessous (je peux faire la mySQL mais juste pas la création Excel)


0 commentaires

3 Réponses :


10
votes

Vous auriez besoin d'une bibliothèque pour créer un document Excel réel, à moins que la CSV droite n'est acceptable. CSV s'ouvrira comme une feuille de calcul dans Excel, mais vous ne pouvez pas faire de choses avancées telles que la mise en forme ou les formules.

J'utilise la bibliothèque phpexcel (http://phpexcel.codeplex.com/). Il permet de compléter la fonctionnalité Excel, y compris des graphiques et des formules. Il faut un peu pour le faire aller et le code est assez verbeux. Mais, une fois que vous avez tout compris, cela fonctionne comme un charme. P>

Voici un extrait du code impliqué, cela vient de ma mise en œuvre de PHPExcel. Je crée un résumé des paiements paypal reçus via API d'un site. Je comprends cela simplement pour vous donner une idée du montant et de la nature du code impliqué. Comme vous pouvez le constater, tout est OO. Ceci est juste la première partie du code, où je confectionne des étiquettes de colonnes et similaires. Il va comme ça à travers des boucles pour mettre les données en place, puis une autre section pour le pied de page. Il rend un fichier très long! P> xxx pré>


edit strud> p>

par demande, voici le code pour réellement Sortiez le document Excel que j'ai créé ci-dessus: P>

    include 'PHPExcel/IOFactory.php';
    $file_name = date('m-d-Y', $oldest_transaction).'_THRU_'.date('m-d-Y', $newest_transaction);
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('/usr/web/cache/temp/'.$file_name.'.xls');
    header ("location:http://www.domain.com/cache/temp/".$file_name.".xls");


3 commentaires

Je cherchais un moyen de faire cela aussi. @Chris - phpexcel a l'air super pour créer des documents Excel. Cependant, je ne trouve rien à enregistrer la sortie dans une variable ou un autre format que vous pourriez ensuite envoyer comme pièce jointe à un courrier électronique. Avez-vous rencontré un moyen de faire ça? Merci.


Bien sûr, j'ai édité la réponse pour inclure la méthode de sortie que j'utilise.


Tout va bien, mais où est la partie email comme demandé dans la question?



3
votes

Je voulais vraiment faire cela sans strong> à l'aide d'une bibliothèque, j'ai donc trouvé une bonne référence sur cette page PHP Envoyez un e-mail avec une pièce jointe PDF sans créer le fichier? puis la modifier pour créer un fichier Excel à l'aide d'une onglet délimitée (\ t ) String.

Vous pouvez donc saisir les données de la DB pour créer la chaîne, puis utiliser cette méthode ci-dessous pour envoyer un courrier électronique avec la pièce jointe Excel P>

<?php
$attachment  = "testdata1 \t testdata2 \t testdata3 \t \n testdata1 \t testdata2 \t testdata3 \t ";

$to = 'myemail@test.com'; 
$subject = 'Test email with attachment'; 

//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 

$headers = "From: fromEmail@test.com"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 

//define the body of the message. 
ob_start(); //Turn on output buffering 
?> 
--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

Email Text here

--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: application/ms-excel; name="test.xls"  
Content-Disposition: attachment  

<?php echo $attachment; 
//copy current buffer contents into $message variable and delete current output buffer 
$message = ob_get_clean(); 
//send the email 
$mail_sent = @mail( $to, $subject, $message, $headers ); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed"; 
?>


1 commentaires

En outre, cela ne crée pas de document Excel, il s'agit d'un CSV délimité par tabulation, qui peut s'ouvrir. CSV est un format général et ne prend en charge aucune des fonctionnalités de formatage d'Excel. Il existe des moyens plus faciles et plus sûrs de créer un CSV que de concaténer une chaîne, un exemple en train d'être FPPECSV (FOPEN (PHP: // Sortie ',' W '), une tablette ("", " CSV "Stuff", vous savez. ')); (source: PHP .NET / Manual / fr / Function.fputcsv.php )



1
votes
**Code to create excel in php:**
$dtime=date('Y-m-d H-i-s');
$dtimeFile=date('Y-m-d-H-i-s');
$headerTab ="Col1 \t Col2\t Col3\n";
$rowRecords='';
$rowRecords .=preg_replace("/\r|\n|\t/"," ",$Col1)."\t".preg_replace("/\r|\n|\t/", " ",$Col2)."\t".preg_replace("/\r|\n|\t/", " ",Col3). "\t\n";
date_default_timezone_set('America/Los_Angeles');
$filename="Your File Name-".$dtimeFile.".xls";
$path='/pathOfFile/';
$csv_handler = fopen ($path.$filename,'w');
fwrite ($csv_handler,$headerTab);
fwrite ($csv_handler,$rowRecords);
fclose ($csv_handler);

**Code to send html email with attached excel in php:**
$file = $path.$filename;
$file_size = filesize($file);
$handle = fopen($file, "r");
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$headers = "From: from@gmail.com"."\r\n";
$headers.= "Bcc: bcc@gmail.com"."\r\n";
$headers.= "MIME-Version: 1.0\r\n";
$headers.= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$headers .= "This is a multi-part message in MIME format.\r\n";
$headers .= "--".$uid."\r\n";
$headers .= "Content-type:text/html; charset=iso-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$headers .= $msg."\r\n\r\n";
$headers .= "--".$uid."\r\n";
$headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$headers .= $content."\r\n\r\n";
$headers .= "--".$uid."--"; 

$date=date("Y-m-d");
if(mail($to,"Mail heading--".$date,$msg,$headers)){
    echo "Mailed successfully";
}
else
{
    echo "Mailed couldn't be sent"; 
}

0 commentaires