首先官网下载两个文件包
都存在Thinkphp-Library-Vendor下
1.phpexcel:
切记,PHPEXCEL.php务必放在Vendor下不要放到文件夹中
方法定义:
在Application-common-function.php中定义如下方法
function <span style="font-family: Arial, Helvetica, sans-serif;">expRate</span><span style="font-family: Arial, Helvetica, sans-serif;">(){//导出Excel</span>
$xlsName = "<span style="font-family: Arial, Helvetica, sans-serif;">Rate</span><span style="font-family: Arial, Helvetica, sans-serif;">";</span>
$xlsCell = array(
array('pv','pv'),
array('uv','uv'),
array('exitn','跳出数')
);
$xlsModel = M('Rate');
$xlsData = $xlsModel->Field('pv,uv,exitn')->select();
exportExcel($xlsName,$xlsCell,$xlsData);
}
function exportExcel($expTitle,$expCellName,$expTableData){
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
$fileName = $_SESSION['loginAccount'].date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
$cellNum = count($expCellName);
$dataNum = count($expTableData);
vendor("PHPExcel");
$objPHPExcel = new PHPExcel();
$cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s'));
for($i=0;$i<$cellNum;$i++){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);
}
// Miscellaneous glyphs, UTF-8
for($i=0;$i<$dataNum;$i++){
for($j=0;$j<$cellNum;$j++){
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);
}
}
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
echo $objWriter->save(str_replace('.php', '.xls', __FILE__));
}
在需要的class类里调用如下
public function makefile(){
expRate();
}
大功告成。不过当时遇到个问题就是save的时候文件的路径和名字~只有在引用如上的内容才能保存下来。然后文件名是functions.xls。。有待后续查验处理。
</pre><p></p><p></p><p>2.phpmail</p><p> 同上。定义代码也在function.php下</p><p></p><pre name="code" class="php">function sendMail($to, $subject, $content) {
Vendor('PHPMailer.PHPMailerAutoload');
$mail = new PHPMailer(); //实例化
$mail->IsSMTP(); // 启用SMTP
$mail->Host=C('MAIL_HOST'); //smtp服务器的名称(这里以163邮箱为例)
$mail->SMTPAuth = C('MAIL_SMTPAUTH'); //启用smtp认证
$mail->Username = C('MAIL_USERNAME'); //你的邮箱名
$mail->Password = C('MAIL_PASSWORD') ; //邮箱密码
$mail->From = C('MAIL_FROM'); //发件人地址(也就是你的邮箱地址)
$mail->FromName = C('MAIL_FROMNAME'); //发件人姓名
$mail->AddAddress($to,"name");
$file = './Application/Common/Common/function.xls';
is_file($file) && $mail->AddAttachment($file);
$mail->WordWrap = 50; //设置每行字符长度
$mail->IsHTML(C('MAIL_ISHTML')); // 是否HTML格式邮件
$mail->CharSet=C('MAIL_CHARSET'); //设置邮件编码
$mail->Subject =$subject; //邮件主题
$mail->Body = $content; //邮件内容
$mail->AltBody = "不支持html哦~"; //邮件正文不支持HTML的备用显示
if(!$mail->Send()) {
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit();
} else {
echo "Message has been sent";
}
}
还需要在conf-config.php下定义
// 配置邮件发送服务器
'MAIL_HOST' =>'smtp.163.com',
'MAIL_SMTPAUTH' =>TRUE, //启用smtp认证
'MAIL_USERNAME' =>'xxx@163.com',
'MAIL_FROM' =>'xxx@163.com',
'MAIL_FROMNAME' =>'xxx@163.com',
'MAIL_PASSWORD' =>'xxx',
'MAIL_CHARSET' =>'utf-8',
'MAIL_ISHTML' =>TRUE, // 是否HTML格式邮件
);
配置完毕
调用如下
//expUser();
$Model = M('Mail');
$mailList = $Model->Field('mail')->select();
for($i=0;$i<count($mailList);$i++){
$sendl = sendMail($mailList[$i]['mail'],'数据导出','数据导出');
echo $sendl;
}
exit;