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

标签 php excel email attachment

我正在使用以下代码:

<?php
$data = $_REQUEST['datatodisplay'];
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=Data.xls");
header("Pragma: no-cache");
header("Expires: 0");

echo $data;

?>

这就是当用户点击提交按钮时我所说的。但我感兴趣的是将 Excel 电子表格作为电子邮件附件发送。因此,在下面的这个文件中,我将连接到一个数据库,选择结果并创建电子表格,然后将其作为附件发送出去。是否可以通过调整下面的代码(我可以做 mysql 但不能创建 excel)

最佳答案

您需要一个库来创建实际的 Excel 文档,除非可以接受直接的 CSV。 CSV 将在 Excel 中作为电子表格打开,但您无法执行任何高级操作,例如格式化或公式。

我使用 PHPExcel 库 (http://phpexcel.codeplex.com/)。它允许完整的 Excel 功能,包括图表和公式。它需要一点时间才能开始,而且代码非常冗长。但是,一旦您完成所有设置,它就会像魅力一样发挥作用。

这是所涉及的代码片段,它来 self 对 PHPExcel 的实现。我正在创建通过网站 API 收到的 Paypal 付款的摘要。我包含这些只是为了让您了解所涉及代码的数量和性质。如您所见,这都是面向对象的。这只是代码的第一部分,我在其中设置列标签等。它通过循环像这样继续将数据放置到位,然后是页脚的另一个部分。它生成了一个非常长的文件!

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set properties
$objPHPExcel->getProperties()->setCreator("----- Web Server");
$objPHPExcel->getProperties()->setLastModifiedBy("-----Web Server");
$objPHPExcel->getProperties()->setTitle("Paypal payment reconciliation report");
$objPHPExcel->getProperties()->setSubject("Paypal payment reconciliation report");
$objPHPExcel->getProperties()->setDescription("Paypal payment reconciliation report");
$objPHPExcel->getProperties()->setKeywords("paypal reconcile");
$objPHPExcel->getProperties()->setCategory("Reconciliation report");

// Create a first sheet, representing sales data
$objPHPExcel->setActiveSheetIndex(0);    

// format the heading
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Paypal Reconciliation - ran on '.date('m/d/y', time()));
$objPHPExcel->getActiveSheet()->mergeCells('A1:C1');
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Date Range: '.date('m/d/Y', $oldest_transaction).' to '.date('m/d/Y', $newest_transaction));
$objPHPExcel->getActiveSheet()->mergeCells('E1:J1');
$objPHPExcel->getActiveSheet()->duplicateStyleArray(
        array(
            'font'    => array(
                'size'      => '12',
                'bold'      => true
            )
        ),
        'A1:I1'
);

// add column labels
$objPHPExcel->getActiveSheet()->setCellValue('A2', '#');
$objPHPExcel->getActiveSheet()->setCellValue('B2', 'Date');
$objPHPExcel->getActiveSheet()->setCellValue('C2', 'Name');
$objPHPExcel->getActiveSheet()->setCellValue('D2', 'Gross');
$objPHPExcel->getActiveSheet()->setCellValue('E2', 'Fee');
$objPHPExcel->getActiveSheet()->setCellValue('F2', 'Net');
$objPHPExcel->getActiveSheet()->setCellValue('G2', 'Balance');
$objPHPExcel->getActiveSheet()->setCellValue('H2', 'Class');
$objPHPExcel->getActiveSheet()->setCellValue('I2', 'Item Title');
$objPHPExcel->getActiveSheet()->setCellValue('J2', '');
$objPHPExcel->getActiveSheet()->setCellValue('K2', '#');
$objPHPExcel->getActiveSheet()->setCellValue('L2', 'Time');
$objPHPExcel->getActiveSheet()->setCellValue('M2', 'Type');
$objPHPExcel->getActiveSheet()->setCellValue('N2', 'Status');
$objPHPExcel->getActiveSheet()->setCellValue('O2', 'Transaction ID');
$objPHPExcel->getActiveSheet()->setCellValue('P2', 'Paypal Receipt ID');
$objPHPExcel->getActiveSheet()->setCellValue('Q2', '--- #');
$objPHPExcel->getActiveSheet()->setCellValue('R2', 'Counterparty');
$objPHPExcel->getActiveSheet()->setCellValue('S2', 'Reference Txn ID');
$objPHPExcel->getActiveSheet()->setCellValue('T2', 'Inv #');

编辑

应要求,这里是实际输出我在上面创建的 Excel 文档的代码:

    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");

关于PHP 创建 Excel 电子表格,然后将其作为附件通过电子邮件发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993300/

相关文章:

PHPMailer 5.1 在添加超过 1 个收件人时发送重复的电子邮件

PHP/MYSQL - 找不到此代码发送邮件两次以上的原因

c# - 在 C# .net 中发送邮件失败

php - 我无法使用 GAE 在 Windows 上以本地模式运行 WordPress

arrays - VBA - MsgBox 二维数组(矩阵)

php - 无论如何要在 Dreamweaver 中检查 PHP 错误?

c# - 可以编译为 DLL 并可以在 Linux Web 服务器后端使用的现代语言?

excel - 工作表不存在时的错误处理

php - 在 Magento 中为产品设置特价日期

php - 限制授权 php 用户的文件访问