| <?php |
| |
/** |
| |
用的是tinkphp Onethink |
| |
例子: |
| |
$info['set_sheet_name'] = array('模板','填表说明'); |
| |
$info['set_aligncenter'][0] = array('A1','B1','C1','D1','E1','F1'); |
| |
$info['set_fontcolor'][0] = array('A1','F1'); |
| |
$info['set_BorderStyle'][0] = 'A1:F20'; |
| |
$info['set_width'][0] = array( |
| |
'A'=>'20', |
| |
'B'=>'20', |
| |
'C'=>'20', |
| |
'D'=>'20', |
| |
'E'=>'20', |
| |
'F'=>'20', |
| |
); |
| |
|
| |
//限制下拉菜单 |
| |
$subject = D('Subject')->getField('name',true); |
| |
$subject_str = '"'.implode(',',$subject).'"'; |
| |
$section = C('SECTION_TYPE'); |
| |
$section_str = '"'.implode(',',$section).'"'; |
| |
|
| |
$new_arr = array(); |
| |
for($i=2;$i<21;$i++){ |
| |
$new_arr1 = array( |
| |
'B'.$i=>'"男,女"', |
| |
'D'.$i=>'"汉族,蒙古族,回族,藏族,维吾尔族,苗族,彝族,壮族,布依族,朝鲜族,满族,侗族,瑶族,白族,土家族,哈尼族,哈萨克族,傣族,黎族,傈僳族,佤族,畲族,高山族,拉祜族,水族,东乡族,纳西族,景颇族,柯尔克孜族,土族,达斡尔族,仫佬族,羌族,布朗族,撒拉族,毛难族,仡佬族,锡伯族,阿昌族,普米族,塔吉克族,怒族,乌孜别克族,俄罗斯族,鄂温克族,德昂族,保安族,裕固族,京族,塔塔尔族,独龙族,鄂伦春族,赫哲族,门巴族,珞巴族,基诺族,穿青人族,其他,外国血统中国籍人士"', |
| |
'F'.$i=>$subject_str, |
| |
'E'.$i=>$section_str |
| |
); |
| |
$new_arr = array_merge($new_arr,$new_arr1); |
| |
} |
| |
$info['set_Validation'][0] = $new_arr; |
| |
|
| |
$data = array( |
| |
array( |
| |
'A1'=>'姓名', |
| |
'B1'=>'性别', |
| |
'C1'=>'出生日期', |
| |
'D1'=>'民族', |
| |
'E1'=>'学段', |
| |
'F1'=>'科目', |
| |
), |
| |
array( |
| |
'A1'=>'1、姓名、科目必填', |
| |
'A2'=>'2、出生日期格式为“20080101”', |
| |
'A3'=>'3、性别、民族、学段、科目为下拉列表,请不要自行编辑,如果教师有多个科目,请填写一个主要科目,其他科目在系统中自行维护', |
| |
'A4'=>'4、文件名教师信息后加学校名称', |
| |
) |
| |
); |
| |
|
| |
$filename = C('WEB_SITE_TITLE').'标题'; |
| |
exportExcelFun($filename,$data,$info); |
| |
|
| |
*/ |
| |
|
| |
|
| |
|
| |
/** |
| |
* @param $file_name 保存文件名 |
| |
* @param $data 保存数据 |
| |
* $data 例子: |
| |
* array( |
| |
* '0'=>array(//第一个工作表 |
| |
* 'A1'=>'值', |
| |
* 'B1'=>'值' |
| |
* ) |
| |
* '1'=>array(//第二个工作表 |
| |
* 'A1'=>'值', |
| |
* 'B1'=>'值' |
| |
* ) |
| |
* ) |
| |
* |
| |
* @param $info 设置格式 |
| |
* @set_sheet_name:工作薄名称(key 第几个工作表,val 设置值) |
| |
* @set_height:单元格高度(key:第几个工作表,v->k第几行,v->v:多高) |
| |
* @set_width:设置宽度 同上 |
| |
* @set_aligncenter:居中显示(k:工作表,val array居中项) |
| |
* @set_fontcolor:设置红色字 同↑ |
| |
* @set_wrapText:设置文字自动换行 同↑ |
| |
* @set_mergeCells:合并单元格 同↑ |
| |
* @set_Validation:设置数据有效性(key工作表,v->k单元格,v->v单元格值'"列表项1,列表项2,列表项3"') |
| |
* @set_BorderStyle:设置边框颜色(key 工作表,v:A1:F20) |
| |
* @set_background:设置背景色(key 工作表, v->0 A1:F20 v-1 颜色) |
| |
* @return array |
| |
* @throws PHPExcel_Exception |
| |
* @author WD-QD-PHP-Yu <yumk@wdcloud.cc> |
| |
* 利用phpExcel导出EXCEL通用代码 |
| |
*/ |
| |
function exportExcelFun($file_name,$data,$info = array()){ |
| |
if(empty($file_name) || empty($data)){ |
| |
return array("error"=>0,'message'=>'参数错误!'); |
| |
} |
| |
Vendor("PHPExcel.PHPExcel"); |
| |
$objPHPExcel = new \PHPExcel(); |
| |
$kapu = "命名"; |
| |
$objPHPExcel->getProperties()->setCreator($kapu) |
| |
->setLastModifiedBy($kapu) |
| |
->setTitle($kapu) |
| |
->setSubject($kapu) |
| |
->setDescription($kapu) |
| |
->setKeywords($kapu) |
| |
->setCategory($kapu); |
| |
|
| |
//设置值 |
| |
foreach ($data as $key=>$val){ |
| |
if($key > 0){ |
| |
$objPHPExcel->createSheet(); |
| |
} |
| |
} |
| |
|
| |
//设置名字 |
| |
if($info['set_sheet_name']){ |
| |
foreach ($info['set_sheet_name'] as $k=>$v){ |
| |
$objPHPExcel->setActiveSheetIndex($k)->setTitle($v);//设置名字 |
| |
} |
| |
} |
| |
|
| |
//合并单元格 |
| |
if($info['set_mergeCells']){ |
| |
foreach ($info['set_mergeCells'] as $k=>$v){ |
| |
foreach ($v as $vv){ |
| |
$objPHPExcel->setActiveSheetIndex($k)->mergeCells($vv); |
| |
} |
| |
} |
| |
} |
| |
|
| |
//设置高度格式 |
| |
if($info['set_height']){ |
| |
foreach ($info['set_height'] as $k=>$v){ |
| |
foreach ($v as $kk=>$vv) { |
| |
$objPHPExcel->setActiveSheetIndex($k)->getRowDimension($kk)->setRowHeight($vv); |
| |
} |
| |
} |
| |
} |
| |
|
| |
//设置宽度格式 |
| |
if($info['set_width']){ |
| |
foreach ($info['set_width'] as $k=>$v){ |
| |
foreach ($v as $kk=>$vv){ |
| |
$objPHPExcel->setActiveSheetIndex($k)->getColumnDimension($kk)->setWidth($vv); |
| |
} |
| |
} |
| |
} |
| |
|
| |
//设置居中 |
| |
if($info['set_aligncenter']){ |
| |
foreach ($info['set_aligncenter'] as $k=>$v){ |
| |
foreach ($v as $vv){ |
| |
$objPHPExcel->setActiveSheetIndex($k)->getStyle($vv)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER); |
| |
$objPHPExcel->setActiveSheetIndex($k)->getStyle($vv)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); |
| |
} |
| |
} |
| |
} |
| |
|
| |
//设置红色字 |
| |
if($info['set_fontcolor']){ |
| |
foreach ($info['set_fontcolor'] as $k=>$v){ |
| |
foreach ($v as $vv){ |
| |
$objPHPExcel->setActiveSheetIndex($k)->getStyle($vv)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); |
| |
} |
| |
} |
| |
} |
| |
|
| |
//文字自动换行 |
| |
if($info['set_wrapText']){ |
| |
foreach ($info['set_wrapText'] as $k=>$v){ |
| |
foreach ($v as $vv){ |
| |
$objPHPExcel->setActiveSheetIndex($k)->getStyle($vv)->getAlignment()->setWrapText(true); |
| |
} |
| |
} |
| |
} |
| |
|
| |
//设置边框 |
| |
if($info['set_BorderStyle']){ |
| |
foreach ($info['set_BorderStyle'] as $k=>$v) { |
| |
foreach ($v as $vv) { |
| |
$objPHPExcel->setActiveSheetIndex($k)->getStyle($vv)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); |
| |
} |
| |
} |
| |
} |
| |
|
| |
//设置格式有效性 |
| |
if($info['set_Validation']){ |
| |
foreach ($info['set_Validation'] as $k=>$v){ |
| |
foreach ($v as $kk=>$vv){ |
| |
$objValidation = $objPHPExcel->setActiveSheetIndex($k)->getCell($kk)->getDataValidation(); //这一句为要设置数据有效性的单元格 |
| |
$objValidation -> setType(\PHPExcel_Cell_DataValidation::TYPE_LIST) |
| |
-> setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION) |
| |
-> setAllowBlank(false) |
| |
-> setShowInputMessage(true) |
| |
-> setShowErrorMessage(true) |
| |
-> setShowDropDown(true) |
| |
-> setErrorTitle('输入的值有误') |
| |
-> setError('您输入的值不在下拉框列表内.') |
| |
// -> setPromptTitle('设备类型') |
| |
-> setFormula1($vv); |
| |
} |
| |
} |
| |
} |
| |
|
| |
//设置背景色 |
| |
if($info['set_background']){ |
| |
foreach ($info['set_background'] as $k=>$v){ |
| |
$objPHPExcel->setActiveSheetIndex($k)->getStyle($v[0])->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); |
| |
$objPHPExcel->setActiveSheetIndex($k)->getStyle($v[0])->getFill()->getStartColor()->setARGB($v[1]); |
| |
} |
| |
} |
| |
|
| |
foreach ($data as $key=>$val){ |
| |
foreach ($val as $k=>$v){ |
| |
$objPHPExcel->setActiveSheetIndex($key)->setCellValue($k,$v); |
| |
} |
| |
} |
| |
|
| |
|
| |
getFile($objPHPExcel,$file_name); |
| |
|
| |
} |
| |
|
| |
/** |
| |
* @param $excel phpexcel对象 |
| |
* @param $filename |
| |
* @param string $filetype |
| |
* @throws PHPExcel_Reader_Exception |
| |
* @author Mayicode <mayicode@163.com> |
| |
* exlcel导出到文件 |
| |
*/ |
| |
function getFile($excel, $filename, $filetype = '') |
| |
{ |
| |
Vendor("PHPExcel.PHPExcel.IOFactory"); |
| |
header('Cache-Control: max-age=0'); |
| |
header('Cache-Control: max-age=1'); |
| |
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past |
| |
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified |
| |
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 |
| |
header('Pragma: public'); // HTTP/1.0 |
| |
|
| |
switch ($filetype) { |
| |
case '2003': |
| |
header('Content-Type: application/vnd.ms-excel'); |
| |
header('Content-Disposition: attachment;filename="' . $filename . '.xls"'); |
| |
$objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel5'); |
| |
$objWriter->save('php://output'); |
| |
break; |
| |
|
| |
default: |
| |
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); |
| |
header('Content-Disposition: attachment;filename="' . $filename . '.xlsx"'); |
| |
$objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007'); |
| |
$objWriter->save('php://output'); |
| |
} |
| |
exit; |
| |
} |
| |
|
| |
/** |
| |
* @param $filePath |
| |
* @return array |
| |
* @throws PHPExcel_Reader_Exception |
| |
* @author Mayicode <mayicode@163.com> |
| |
* 利用phpExcel 导入Excel |
| |
*/ |
| |
function importExeclFun($filePath){ |
| |
if(!file_exists($filePath)){ |
| |
return array("error"=>0,'message'=>'file not found!'); |
| |
} |
| |
|
| |
Vendor("PHPExcel.PHPExcel.IOFactory"); |
| |
$objReader = \PHPExcel_IOFactory::createReader('Excel2007'); |
| |
if(!$objReader->canRead($filePath)){ |
| |
$objReader = \PHPExcel_IOFactory::createReader('Excel5'); |
| |
if(!$objReader->canRead($filePath)){ |
| |
return array("error"=>0,'message'=>'file not found!'); |
| |
} |
| |
} |
| |
$objReader->setReadDataOnly(true); |
| |
try{ |
| |
$PHPReader = $objReader->load($filePath); |
| |
}catch(Exception $e){} |
| |
if(!isset($objReader)) return array("error"=>0,'message'=>'read error!'); |
| |
|
| |
//获取工作表的数目 |
| |
$sheetCount = $PHPReader->getSheetCount(); |
| |
|
| |
if($sheetCount > 0){ |
| |
for($i = 0;$i< $sheetCount; $i++){ |
| |
$excelData[]=$PHPReader->getSheet($i)->toArray(null, true, true, true); |
| |
} |
| |
}else{ |
| |
$excelData[]=$PHPReader->getSheet(0)->toArray(null, true, true, true); |
| |
} |
| |
|
| |
|
| |
unset($PHPReader); |
| |
unlink($filePath); |
| |
return array("error"=>1,"data"=>$excelData); |
| |
} |