好吧,我想用PHP脚本写一个Excel文件。 实际上,当用户提交表单时,我们会收到邮件和当前日期,以便将其放入Excel中。
邮件必须在一列中,日期也必须。
所以这是我的形式(经典形式):
<form action="mail.php" method="POST">
<label for="name">Nom*<br />
<input id="name" type="text" name="Nom" />
</label><br /><br />
<label for="mail">Mail*<br />
<input id="mail" type="email" name="Email" />
</label><br /><br />
<label for="tel">Téléphone*<br />
<input id="tel" type="text" name="Téléphone" />
</label><br /><br />
<label for="comment">Commentaire*<br />
<textarea id="comment" type="text" name="Commentaires"> </textarea>
</label><br /><br />
<input type="submit" value="Envoyer" />
</form>
我的mail.php,所以我在这里使用PHPExcel类:
<?php
/** Error reporting */
error_reporting(E_ALL);
/** PHPExcel */
include './Classes/PHPExcel.php';
/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';
include './Classes/PHPExcel/IOFactory.php';
/* Set the variables */
$mail = $_POST['Email'];
// Line number
$ligne = 1;
// Excel object
$fichier = new PHPExcel();
$fichier->getProperties()->setCreator("Don't know");
//Set the size
$fichier->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$fichier->getActiveSheet()->getColumnDimension('B')->setWidth(30);
$fichier->setActiveSheetIndex(0);
$feuille = $fichier->getActiveSheet();
function writeExcel($objExcel, $sheet, $email){
$sheet->SetCellValue('A'.$ligne, $email);
$sheet->SetCellValue('B'.$ligne, date("Y-m-d H:i"));
$objWriter = new PHPExcel_Writer_Excel2007($objExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
$ligne++;
}
writeExcel($fichier, $feuille, $mail);
?>
我认为这是行号是一个问题,我不知道如何组织我的代码。 每次用户提交表单时,我们都会将他的邮件(单元格A1)和当前日期(单元格B1)放在一起,下一封邮件必须在A2单元格等处...
我不知道你是否知道我的意思^^
修改 随着评论,我修改了我的代码!但它是一样的^^
<?php
/** Error reporting */
error_reporting(E_ALL);
/** PHPExcel */
include './Classes/PHPExcel.php';
/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';
include './Classes/PHPExcel/IOFactory.php';
/* Set the variable */
$mail = $_POST['Email'];
// Load file if it doesn't exists
if (file_exists("mail.xlsx"))
{
$fichier = PHPExcel_IOFactory::load("mail.xlsx");
}
else
{
$fichier = new PHPExcel();
}
// Line number
$ligne = $fichier->getActiveSheet()->getHighestRow() + 1;
// Excel object
$fichier->getProperties()->setCreator("Don't know");
//Set the size
$fichier->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$fichier->getActiveSheet()->getColumnDimension('B')->setWidth(30);
$fichier->setActiveSheetIndex(0);
$feuille = $fichier->getActiveSheet();
// Line number
global $ligne = $fichier->getActiveSheet()->getHighestRow() + 1;
function writeExcel($objExcel, $sheet, $email){
$sheet->SetCellValue('A'.global $ligne, $email);
$sheet->SetCellValue('B'.global $ligne, date("Y-m-d H:i"));
$objWriter = new PHPExcel_Writer_Excel2007($objExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
global $ligne++;
}
writeExcel($fichier, $feuille, $mail);
?>
最后编辑(我希望) 好的,它正在发挥作用:D
这是我的代码:
<?php
/** Error reporting */
error_reporting(E_ALL);
/** PHPExcel */
include './Classes/PHPExcel.php';
/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';
include './Classes/PHPExcel/IOFactory.php';
/* Set the variable */
$mail = $_POST['Email'];
// Load file if it doesn't exists
if (file_exists('mail.xlsx'))
{
$objExcel = PHPExcel_IOFactory::load('mail.xlsx');
}
else
{
$objExcel = new PHPExcel();
}
$objExcel->getProperties()->setCreator("Don't know");
//Set the size
$objExcel->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$objExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30);
$objExcel->setActiveSheetIndex(0);
$sheet = $objExcel->getActiveSheet();
// Line number
$line = $objExcel->getActiveSheet()->getHighestRow() + 1;
/*
This function write in the Excel file.
Note that the variables are passed by reference.
*/
function writeExcel(&$objExcel, &$sheet, $email, &$line){
$sheet->SetCellValue('A'.$line, $email);
$sheet->SetCellValue('B'.$line, date("Y-m-d H:i"));
$objWriter = new PHPExcel_Writer_Excel2007($objExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
}
writeExcel($objExcel, $sheet, $mail, $line);
?>
答案 0 :(得分:1)
首先,您需要了解PHP中的variable scope。如评论中所述,这是您的主要问题所在。
您还需要准确了解如何使用global
关键字,因为您明显误解了这一点。嗯......我真的建议不要使用它,因为它通常被认为是坏事!
我建议您使用名为pass by reference的技术,这是第一条评论的问题的答案。
最后,请 ,用英文编写代码。不仅为了我们的缘故,人们试图帮助你,也为了你自己(和雇主)的缘故。以您不理解的语言查看变量和函数名称会妨碍理解代码的能力,从而增加发生错误的可能性。始终假设其他人需要查看并理解您的代码!