<?php
//前部分为phpexecel使用方法,后部分为phpexecel实例
//1.引用PHPExcel
include 'PHPExcel.php';
include 'PHPExcel/Writer/Excel2007.php';
//或者include 'PHPExcel/Writer/Excel5.php'; 用于输出.xls的
$objPHPExcel = new PHPExcel(); //创建一个实例
//2.设置excel的属性
//创建人
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
//最后修改人
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
//标题
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
//题目
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
//描述
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
//关键字
$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
//种类
$objPHPExcel->getProperties()->setCategory("Test result file");
//也可用下面这种方式
$objPHPExcel->getProperties()->setCreator("ctos")
->setLastModifiedBy("ctos")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
//设置当前的sheet
$objPHPExcel->setActiveSheetIndex(0);
//设置sheet的标题
$objPHPExcel->getActiveSheet()->setTitle('Simple');
//设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
//设置单元格高度
$objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(40);
//合并单元格
$objPHPExcel->getActiveSheet()->mergeCells('A18:E22');
//拆分单元格
$objPHPExcel->getActiveSheet()->unmergeCells('A28:B28');
//设置保护cell,保护工作表
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
$objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');
//设置格式
$objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
$objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('E4'), 'E5:E13' );
//设置加粗
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
//设置水平对齐方式(HORIZONTAL_RIGHT,HORIZONTAL_LEFT,HORIZONTAL_CENTER,HORIZONTAL_JUSTIFY)
$objPHPExcel->getActiveSheet()->getStyle('D11')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
//设置垂直居中
$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//设置字
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);
//设置边框
$objPHPExcel->getActiveSheet()->getStyle('A1:I20')->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
//设置边框颜色
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300');
//插入图像
$objDrawing = new PHPExcel_Worksheet_Drawing();
/*设置图片路径 切记:只能是本地图片*/
$objDrawing->setPath('图像地址');
/*设置图片高度*/
$objDrawing->setHeight(180);//照片高度
$objDrawing->setWidth(150); //照片宽度
/*设置图片要插入的单元格*/
$objDrawing->setCoordinates('E2');
/*设置图片所在单元格的格式*/
$objDrawing->setOffsetX(5);
$objDrawing->setRotation(5);
$objDrawing->getShadow()->setVisible(true);
$objDrawing->getShadow()->setDirection(50);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
//设置单元格背景色
$objPHPExcel->getActiveSheet(0)->getStyle('A1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet(0)->getStyle('A1')->getFill()->getStartColor()->setARGB('FFCAE8EA');
//最后输入浏览器,导出Excel
$savename='导出Excel示例';
$ua = $_SERVER["HTTP_USER_AGENT"];
$datetime = date('Y-m-d', time());
if (preg_match("/MSIE/", $ua)) {
$savename = urlencode($savename); //处理IE导出名称乱码
}
// excel头参数
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$savename.'.xls"'); //日期为文件名后缀
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //excel5为xls格式,excel2007为xlsx格式
$objWriter->save('php://output');
/*------------------------------------------------------ */
//-- phpexcel数据导出例子
/*------------------------------------------------------ */
if ($_REQUEST['act'] == 'gen_excel')
{
@set_time_limit(0);
/* 获得此线下红包类型的ID */
$tid = !empty($_GET['tid']) ? intval($_GET['tid']) : 0;
$type_name = $db->getOne("SELECT type_name FROM ".$ecs->table('bonus_type')." WHERE type_id = '$tid'");
/* 文件名称 */
$bonus_filename = $type_name .'_bonus_list';
include_once(ROOT_PATH . 'phpExcel/Classes/PHPExcel.php');
require_once(ROOT_PATH . 'phpExcel/Classes/PHPExcel/Writer/Excel5.php');
$objPHPExcel = new PHPExcel();
//合并单元格:
$objPHPExcel->getActiveSheet()->mergeCells('A1:E1');
$objPHPExcel->getActiveSheet()->SetCellValue('A1', $_LANG['bonus_excel_file']);
//垂直居中
$objPHPExcel->getActiveSheet()->getStyle("A1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//输入单元格
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A2', $_LANG['bonus_sn']);
$objPHPExcel->getActiveSheet()->SetCellValue('B2', $_LANG['type_money']);
$objPHPExcel->getActiveSheet()->SetCellValue('C2', $_LANG['type_name']);
$objPHPExcel->getActiveSheet()->SetCellValue('D2', $_LANG['use_enddate']);
$objPHPExcel->getActiveSheet()->SetCellValue('E2', '是否使用');
$val = array();
$sql = "SELECT ub.bonus_id,ub.used_time,ub.bonus_type_id, ub.bonus_sn, bt.type_name, bt.type_money, bt.use_end_date ".
"FROM ".$ecs->table('user_bonus')." AS ub, ".$ecs->table('bonus_type')." AS bt ".
"WHERE bt.type_id = ub.bonus_type_id AND ub.bonus_type_id = '$tid' ORDER BY ub.bonus_id DESC";
$res = $db->query($sql);
$code_table = array();
$i=3;
while ($val = $db->fetchRow($res))
{
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$i, $val['bonus_sn']);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$i, $val['type_money']);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$i, $val['type_name']);
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$i, local_date('Y-m-d', $val['use_end_date']));
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$i, $val['used_time']==0?'未使用':'已使用');
//对齐
$objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$objPHPExcel->getActiveSheet()->getStyle('B'.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$objPHPExcel->getActiveSheet()->getStyle('C'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//填充颜色
if($val['used_time']!=0){
$objPHPExcel->getActiveSheet()->getStyle('E'.$i)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle('E'.$i)->getFill()->getStartColor()->setARGB('#FF0000');
}
$i++;
}
// 设置宽width
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(18);
// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle($bonus_filename);
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
$objWriter->save(str_replace('.php', '.xls', __FILE__));
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header("Content-Disposition: attachment; filename=$bonus_filename.xls");
header("Content-Transfer-Encoding:binary");
$objWriter->save("php://output");
}
//处理中文输出问题
//需要将字符串转化为UTF-8编码,才能正常输出,否则中文字符将输出为空白,如下处理:
$str =iconv('gb2312', 'utf-8', $str);
//或者你可以写一个函数专门处理中文字符串:
function convertUTF8($str)
{
if(empty($str)) return'';
return iconv('gb2312', 'utf-8', $str);
}
//从数据库输出数据处理方式
//从数据库读取数据如:
$db = new Mysql($dbconfig);
$sql = "SELECT * FROM 表名";
$row = $db->GetAll($sql); // $row为二维数组
$count = count($row);
for ($i = 2; $i <= $count+1; $i++) {
$objPHPExcel->getActiveSheet()->setCellValue('A'. $i, convertUTF8($row[$i-2][1]));
$objPHPExcel->getActiveSheet()->setCellValue('B'. $i, convertUTF8($row[$i-2][2]));
$objPHPExcel->getActiveSheet()->setCellValue('C'. $i, convertUTF8($row[$i-2][3]));
$objPHPExcel->getActiveSheet()->setCellValue('D'. $i, convertUTF8($row[$i-2][4]));
$objPHPExcel->getActiveSheet()->setCellValue('E'. $i, convertUTF8(date("Y-m-d", $row[$i-2][5])));
$objPHPExcel->getActiveSheet()->setCellValue('F'. $i, convertUTF8($row[$i-2][6]));
$objPHPExcel->getActiveSheet()->setCellValue('G'. $i, convertUTF8($row[$i-2][7]));
$objPHPExcel->getActiveSheet()->setCellValue('H'. $i, convertUTF8($row[$i-2][8]));
}
/*------------------------------------------------------ */
//-- 导入execel到数据库中
/*------------------------------------------------------ */
if ($_REQUEST['act'] == 'send_by_import')
{
if(empty($_FILES['inputExcel']['name'])){alert('请选择excel文件','add');} //验证数据
include_once (dirname ( __FILE__ ) .'/phpExcel/Classes/PHPExcel.php'); //加载excel相关文件
include_once (dirname ( __FILE__ ) .'/phpExcel/Classes/PHPExcel/Writer/Excel2007.php');
$objPHPExcel = new PHPExcel(); //实例化PHPExcel类
$objPHPExcel = PHPExcel_IOFactory::load($_FILES["inputExcel"]["tmp_name"]);
$indata = $objPHPExcel->getSheet(0)->toArray(); //内容转换为数组
insertExcelComment($indata,$comment_configs); //调用函数,导入数据
}
//导入excel数据 处理函数
function insertExcelComment($data,$bonus_type_id){
global $db,$ecs;
if ( empty( $data ) ) alert('导入失败,请检查excel是否有数据','send&id=14&send_by=3&import=1');//验证数据
$new_arr = array();
foreach($data as $key=>$into){
if($into[1] != '' && $into[2] != ''){
$endInto['xuId'] = $into[0];
$endInto['bonus_type_id'] = intval($into[1]);
$endInto['bonus_sn'] = intval($into[2]);
$new_arr[]=$endInto;
}
}
//去掉标题
if($new_arr[0]['bonus_sn'] == '优惠码'){
unset($new_arr[0]);
//统计excel内容总数量,成功导入数量,导入失败数量
$allNum = count($new_arr);
}else{
$allNum = count($new_arr);
}
//获取数据库优惠号
$sql = "select bonus_sn from ".$ecs->table('user_bonus');
$bonus_sn = $db->getAll($sql);
$bonus_sn_arr = array();
foreach ($bonus_sn as $key => $val) {
$bonus_sn_arr[] = $val['bonus_sn'];
}
//判断优惠卷ID是否存在与格式是否正确
foreach($new_arr as $val){
if($val['bonus_type_id'] != $bonus_type_id || strlen($val['bonus_sn'])<8 || in_array($val['bonus_sn'],$bonus_sn_arr)){
if( intval($val['xuId']) != 0){
$arra[] = $val['xuId'];
$isType = 1;
}
}
}
if($isType == 1){
$falseNums = count($arra);//统计失败数量
$falsexuId = implode(' ',$arra);
alert("共 $falseNums 条数据导入失败,序号是 " . $falsexuId . ' 请修改后再上传','send&id=14&send_by=3&import=1');
}else{
foreach($new_arr as $val){
unset($val['xuId']);
//统计符合要求可导入数据库的数量
$trueNum[] = $val;
$sql = "INSERT INTO ".$ecs->table('user_bonus')." (".implode(",", array_keys($val)).") VALUES ('".implode("','",$val)."')";
$db->query($sql);
}
$trueNum = count($trueNum);
alert("共 $allNum 条数据,成功导入 $trueNum 条",'list');
}
}
function alert($str, $act) {
echo "<script>alert('$str');location.href='bonus.php?act=$act';" . "</script>";
}