我正在使用以下代码:
<?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/