PHP 创建 Excel 电子表格,然后将其作为附件通过电子邮件发送

作者:编程家 分类: excel 时间:2025-10-04

使用PHP创建Excel电子表格,并通过电子邮件发送作为附件是一种常见的开发需求。PHP提供了许多库和函数来处理Excel文件,并且发送电子邮件也是PHP的一项强大功能。在本文中,我们将探讨如何使用PHP来实现这一需求,并提供相应的案例代码。

首先,让我们来了解一下如何使用PHP创建Excel电子表格。PHPExcel是一个流行的PHP库,可以用来生成和操作Excel文件。要使用PHPExcel库,我们需要下载并安装它。安装完成后,我们可以使用以下代码来创建一个简单的Excel文件:

php

// 引入PHPExcel库

require_once 'PHPExcel/PHPExcel.php';

// 创建一个Excel对象

$objPHPExcel = new PHPExcel();

// 设置表格属性

$objPHPExcel->getProperties()

->setTitle("My Excel File")

->setSubject("Creating Excel using PHP")

->setDescription("This is a sample Excel file created using PHP.");

// 创建一个工作表

$objPHPExcel->setActiveSheetIndex(0);

$sheet = $objPHPExcel->getActiveSheet();

// 设置单元格内容

$sheet->setCellValue('A1', 'Hello');

$sheet->setCellValue('B1', 'World');

// 保存Excel文件

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

$objWriter->save('my_excel_file.xlsx');

// 清空内存

$objPHPExcel->disconnectWorksheets();

unset($objPHPExcel);

上述代码首先引入了PHPExcel库,并创建了一个Excel对象。然后,我们设置了Excel文件的属性,如标题、主题和描述。接下来,我们创建了一个工作表,并设置了单元格的内容。最后,我们使用PHPExcel_IOFactory类将Excel对象保存为一个文件。

接下来,我们将学习如何发送带有Excel附件的电子邮件。PHP提供了内置的mail()函数,可以用于发送电子邮件。以下是一个简单的示例代码,演示了如何使用mail()函数发送电子邮件,并添加Excel文件作为附件:

php

// 邮件接收者和主题

$to = 'receiver@example.com';

$subject = 'Email with Excel attachment';

// 邮件内容

$message = 'Please find the attached Excel file.';

// 设置邮件头

$headers = "From: sender@example.com\r\n";

$headers .= "Reply-To: sender@example.com\r\n";

$headers .= "MIME-Version: 1.0\r\n";

$headers .= "Content-Type: multipart/mixed; boundary=\"boundary\"\r\n";

// 读取Excel文件内容

$fileContent = file_get_contents('my_excel_file.xlsx');

// 添加Excel文件作为附件

$attachment = chunk_split(base64_encode($fileContent));

$body = "--boundary\r\n";

$body .= "Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; name=\"my_excel_file.xlsx\"\r\n";

$body .= "Content-Transfer-Encoding: base64\r\n";

$body .= "Content-Disposition: attachment\r\n";

$body .= "\r\n";

$body .= $attachment . "\r\n";

$body .= "--boundary--";

// 发送邮件

$mailSent = mail($to, $subject, $message, $headers, "-f sender@example.com");

// 检查邮件是否发送成功

if ($mailSent) {

echo "Email sent successfully.";

} else {

echo "Failed to send email.";

}

上述代码中,我们首先设置了邮件接收者和主题。然后,我们定义了邮件的内容和邮件头。接下来,我们使用file_get_contents()函数读取Excel文件的内容,并将其添加为邮件的附件。最后,我们使用mail()函数发送邮件,并检查邮件是否发送成功。

在本文的中间段落中,我们将添加一个标题,并为标题添加``标签来突出显示。这样可以提高文章的可读性和结构化。

案例代码:

php

// 创建一个Excel对象

$objPHPExcel = new PHPExcel();

// 设置表格属性

$objPHPExcel->getProperties()

->setTitle("My Excel File")

->setSubject("Creating Excel using PHP")

->setDescription("This is a sample Excel file created using PHP.");

// 创建一个工作表

$objPHPExcel->setActiveSheetIndex(0);

$sheet = $objPHPExcel->getActiveSheet();

// 设置单元格内容

$sheet->setCellValue('A1', 'Hello');

$sheet->setCellValue('B1', 'World');

// 保存Excel文件

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

$objWriter->save('my_excel_file.xlsx');

// 发送邮件

$to = 'receiver@example.com';

$subject = 'Email with Excel attachment';

$message = 'Please find the attached Excel file.';

$headers = "From: sender@example.com\r\n";

$headers .= "Reply-To: sender@example.com\r\n";

$headers .= "MIME-Version: 1.0\r\n";

$headers .= "Content-Type: multipart/mixed; boundary=\"boundary\"\r\n";

$fileContent = file_get_contents('my_excel_file.xlsx');

$attachment = chunk_split(base64_encode($fileContent));

$body = "--boundary\r\n";

$body .= "Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; name=\"my_excel_file.xlsx\"\r\n";

$body .= "Content-Transfer-Encoding: base64\r\n";

$body .= "Content-Disposition: attachment\r\n";

$body .= "\r\n";

$body .= $attachment . "\r\n";

$body .= "--boundary--";

$mailSent = mail($to, $subject, $message, $headers, "-f sender@example.com");

// 检查邮件是否发送成功

if ($mailSent) {

echo "Email sent successfully.";

} else {

echo "Failed to send email.";

}

在本文中,我们学习了如何使用PHP创建Excel电子表格,并通过电子邮件发送作为附件。通过使用PHPExcel库,我们可以轻松地生成Excel文件,并使用PHP内置的mail()函数发送电子邮件。以上提供的案例代码可以帮助你快速上手。希望本文对你有所帮助!