使用PHP生成Excel文件并通过邮件发送

需求:每周一自动检测一个月内即将过期的用户,生成excel2007文件(xlsx文件)并发送给指定的人员。

做成一个脚本,使用定时任务即可解决。脚本分解为两步:生成Excel,发送邮件。

一.生成Excel:使用简单的更改文件头(header)和使用table标签生成Excel文件会出现各种问题——打开的时候会有提醒,或者其他语言无法解析。使用phpExcel插件(官方已不再维护),在php7.2以上版本会出现兼容性问题。

又找了个插件完美解决。就是:PHP_XLSXWriter

相比于phpExcel,PHP_XLSXWriter小而强悍,它并没有PHPExcel功能丰富,很多高级操作比如冻结表头,并不具备,但是它导出速度非常快,非常适合于数据量特别大,报表格式不是很复杂的导出需求。github地址:https://github.com/mk-j/PHP_XLSXWriter

二.发送邮件:我使用的是自己封装的一个邮件类。(下篇博客会贴出来给大家做一个参考)

实现代码如下:(只是一个例子,供参考)

<?php 
$dir=dirname(__FILE__);//查找当前脚本所在路径
include_once( $dir."/xlsxwriter.class.php");//引入
//表格头信息
$header = array(
  '公司'=>'string',//text
  '部门'=>'string',//text
  '产品名称'=>'string',
  '产品id'=>'string',
  '截止时间'=>'date',
);
//表格内容
$list = array(
array('南华证券有限公司','测试1','手机炒股','M11uM+0+QwoRcI3SA','2019-01-15'),
array('北华证券有限公司','测试2','电脑炒股','M11uM+0+QwoRcI3SB','2019-01-17'),
array('东华证券有限公司','测试3','不要炒股','M11uM+0+QwoRcI3SC','2019-01-16'),
);	

$writer = new XLSXWriter();
$writer->writeSheetHeader('Sheet1', $header);
foreach($list as $row)
	$writer->writeSheetRow('Sheet1', $row);
/**如果想直接导出表格【浏览器中】
 代码直接如下即可,写好的接口 需要用浏览器请求,使用postman 会看到乱码[类似用文本打开Excel文件]
$name = 'aaa.xlsx';
header('Content-Type:application/vnd.ms-excel');
header("Content-Disposition:attachment;filename=$name");
//输出到浏览器
$writer->writeToStdOut();
$writer = null;
exit;
**/
// 输出文件
// $writer->writeToFile('test.xlsx');
//将文件内容赋值给$data
$data = $writer->writeToString();
$attachment = array("文件名.xlsx"=>$data);
//收件人email地址
$sendMailTo = "test@mail.com,test1@mail.com,test2@mail.com";
$subject = "邮件名称";
$body = "邮件内容";
//发送邮件
sendMail($sendMailTo,$subject,$body,$attachment);
// 此处用到的邮件类下一篇贴出供参考
function sendMail($sendMailTo,$subject,$body,$attachment = null)
{
	if(!empty($attachment)){
		$newAttachment = array();
		foreach ($attachment as $key => $value) {
			$newAttachment[] = array(
				'datatype' => 'data',
				'data' => $value,
				'filename' => $key
			);
		}
		$attachment = $newAttachment;
	}
	$emailArr = explode(',', $sendMailTo);
	foreach ($emailArr as $email) {
		Mail::sendemail($email,$subject,$body,$attachment);
	}
}
?>

定时,每周一跑一次。需求解决


关于PHP_XLSXWriter的使用,如果是用在html页面,通过点击按钮导出表格的话,可以这么用:

$name = 文件名;
header('Content-Type:application/vnd.ms-excel');
header("Content-Disposition:attachment;filename=$name");
//输出到浏览器           
$writer->writeToStdOut('php://output');
$writer = null;

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值