一,開發(fā)過程中遇到了要用自定義excel表格,記錄如下
里面對用的sql對相應的調整即可
方法:
public function downLoadFile()
{
import('Vendor.PHPExcel');
$phpExcel = new \PHPExcel();
$phpExcel->getDefaultStyle()->getFont()->setName('宋體');
$phpExcel->getDefaultStyle()->getFont()->setSize(11);
$phpExcel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$workSheet = $phpExcel->getActiveSheet();
$workSheet->getColumnDimension('A')->setWidth(8.38);
$workSheet->getColumnDimension('B')->setWidth(16.88);
$workSheet->getColumnDimension('C')->setWidth(11.88);
//合并單元格A1到AH1
$workSheet->mergeCells('A1:C1');
//設置邊框
$workSheet->getStyle('A1:C15')->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
//設置行高為42
$workSheet->getRowDimension(1)->setRowHeight(42);
//在第一行寫入'用戶排班表'
$workSheet->setCellValue('A1', '技能導入表');
//設置樣式
$workSheet->getStyle('A1')->getFont()->setSize(18);
$workSheet->getStyle('A1')->getFont()->setBold(true);
$workSheet->setCellValue('A2', '序號');
$workSheet->setCellValue('B2', '部門名稱');
$workSheet->setCellValue('C2', '技能 ');
//插入數(shù)據(jù) B列為部門
$departStr = '';
$departArr = M('user_organize')->where(array('level'=>6,'is_del'=>0))->group('judgecode')
->order('sort_num desc')->select();
foreach ($departArr as $ke => $va) {
$departStr .= $va['name'] . ',';
$departIds[] = $ke;
}
$departStr = rtrim($departStr, ',');
for($i = 3; $i <= 15; $i++) {
$objValidation = $workSheet->getCell('B' . $i)->getDataValidation();
$objValidation->setType( \PHPExcel_Cell_DataValidation::TYPE_LIST );
$objValidation->setErrorStyle( \PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
$objValidation->setAllowBlank(false);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('輸入錯誤');
$objValidation->setError('此值不在下拉列表中。');
$objValidation->setPromptTitle('請從列表中選擇');
$objValidation->setPrompt('請從單元格下拉列表中選擇一個值。');
$objValidation->setFormula1('"' . $departStr . '"'); // Make sure to put the list items between " and " !!!
$workSheet->getCell('B' . $i)->setDataValidation($objValidation);
}
//合并單元格A35-AH42
$workSheet->mergeCells('A12:C15');
//設置A35的文字對齊格式
$workSheet->getStyle('A12')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$workSheet->getStyle('A12')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_TOP);
//讓單元格內換行符起作用
$workSheet->getStyle('A12')->getAlignment()->setWrapText(true);
//定界符結束
$introduce = <<<EOF
//1、為保證導入數(shù)據(jù)成功,序號,部門名稱和技能必填且要保證正確性哦!(重要)\n 2、同一部門的多個技能用英文符號(,)隔開,技能名不能重復并且當個技能名稱不能大于20個字!\n
EOF;
$workSheet->setCellValue('A12', $introduce);
$result = \PHPExcel_IOFactory::createWriter($phpExcel, 'Excel2007');
//返回的對象太大,通過網絡傳輸會有丟失信息情況,所以序列化
return serialize($result);
}
調用:
/*
* 下載樣式
* */
public function downLoadFile()
{
import('Vendor.PHPExcel');
$RpcClient = RpcClient::getInstance();
$result = $RpcClient->sendRequest('/User/WorkSkill', 'downLoadFile', []);
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=1.xlsx");
header('Cache-Control: max-age=0');
$result1 = unserialize($result);
$result1->save('php://output');
}