/*********************************************方法一******************************************************/
/**
* 批量导出数据
* @param $arr 从数据库查询出来,即要导出的数据
* $name excel表格名
*/
function expExcel($arr,$name){
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
require_once dirname(__FILE__) . '/../Classes/PHPExcel/Reader/Excel5.php';
// require_once dirname(__FILE__) . '/../Classes/PHPExcel/Reader/Excel2007.php';
//实例化
$objPHPExcel = new PHPExcel();
/*右键属性所显示的信息*/
$objPHPExcel->getProperties()->setCreator("zxf") //作者
->setLastModifiedBy("zxf") //最后一次保存者
->setTitle('数据EXCEL导出') //标题
->setSubject('数据EXCEL导出') //主题
->setDescription('导出数据') //描述
->setKeywords("excel") //标记
->setCategory("result file"); //类别
//设置当前的表格
$objPHPExcel->setActiveSheetIndex(0);
// 设置表格第一行显示内容
$objPHPExcel->getActiveSheet()
->setCellValue('A1', '序号')
->setCellValue('B1', '区域类型')
->setCellValue('C1', '显示顺序')
->setCellValue('D1', '区域名称');
//设置第一行为红色字体
// ->getStyle('A1:K1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
// ->getStyle('A1:D1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
// 设置默认字体和大小
$objPHPExcel->getDefaultStyle()->getFont()->setName('宋体');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(12);
//单元格居中
$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$key = 1;
/*以下就是对处理Excel里的数据,横着取数据*/
foreach($arr as $v){
// print_r($v);
//设置循环从第二行开始
$key++;
$objPHPExcel->getActiveSheet()->getStyle('C'.$key)->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()
//Excel的第A列,name是你查出数组的键值字段,下面以此类推
->setCellValue('A'.$key, $key-1)
->setCellValue('B'.$key, $v['PMP_TypeName'])
->setCellValue('C'.$key, $v['PMV_Index'])
->setCellValue('D'.$key, $v['PMV_Name']);
}
//设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
//设置当前的表格
$objPHPExcel->setActiveSheetIndex(0);
ob_end_clean(); //清除缓冲区,避免乱码
header('Content-Type: application/vnd.ms-excel'); //文件类型
header('Content-Disposition: attachment;filename="'.$name.'.xls"'); //文件名
header('Cache-Control: max-age=0');
header('Content-Type: text/html; charset=utf-8'); //编码
//返回已经存好的文件目录地址提供下载
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
$response = array(
'success' => true,
'url' => saveExcelToLocalFile($objWriter,$name)
);
echo json_encode($response);
exit;
}
//生成xls文件并存入当前文件目录
function saveExcelToLocalFile($objWriter,$filename){
// make sure you have permission to write to directory
$filePath = 'download/'.$filename.'.xls';
$objWriter->save($filePath);
return $filePath;
}
/************************************************************************方法二***********************************************************/
function mod_excel() { global $row_User; // 条件查询 $wheresql1 = $wheresql = getQueryCondition(); //编写SQL语句 $sql = "select * from (select row_number()over(order by OYP_ID DESC )row, TcQueryPlat.* FROM ( SELECT FlowDataV.MFL_ID, MAX(MP_InstanceNode.MIN_ID) AS MIN_ID, MAX(MP_InstanceNode.MFN_ID) AS MFN_ID , MP_FlowInstance.MFV_ID, FlowDataV.MFL_State, FlowDataV.MFL_Title, OY.OYP_PayDept, OY.OYP_PayPerson,OEP_Name , OEP_Count, OEP_Price, OEP_PlanDate, OEP_User, OEP_Remark,OY.OYP_ID,SFD_Name FROM FlowDataV JOIN MP_InstanceNode ON FlowDataV.MFL_ID = MP_InstanceNode.MFL_ID JOIN MP_FlowINstance ON FlowDataV.MFL_ID = MP_FlowINstance.MFL_ID JOIN OA_YearEquipmentPlan OY ON FlowDataV.MFI_DataID = OY.OYP_ID JOIN OA_EquipmentPlan OP ON OY.OYP_ID = OP.OYP_ID JOIN SF_Department ON SF_Department.SFD_ID = OY.OYP_PayDept WHERE FlowDataV.MWF_Code = 'OA_YearEquipmentPlan' AND FlowDataV.MFL_State = 'Finish' GROUP BY FlowDataV.MFL_ID, MP_FlowInstance.MFV_ID, FlowDataV.MFL_State, FlowDataV.MFL_Title, OY.OYP_PayDept,OY.OYP_PayPerson,OY.OYP_ID, OEP_Name, OEP_Count, OEP_Price, OEP_PlanDate, OEP_User, OEP_Remark,SFD_Name ) TcQueryPlat WHERE $wheresql1) as t"; $cursor = mssqlquery($sql); $i = 0; $result = array(); for($i=0;$i<8;$i++){ $maxColWidth[$i]=0; } $jj=0; // 解析执行的SQL结果,回去想要的数据 while ($row = sqlsrv_fetch_array($cursor, SQLSRV_FETCH_ASSOC)) { $jj++; $result[] = array( 'OEP_ID' => $jj, 'SFD_Name' => iconv("GBK", "UTF-8", $row["SFD_Name"]), //部门 'OEP_PlanDate' => $row['OEP_PlanDate'], //购置时间 'OEP_Name' => iconv("GBK", "UTF-8", $row["OEP_Name"]), //资产名称 'OEP_Count' => floatval($row["OEP_Count"]), //数量 'OEP_Price' =>floatval($row["OEP_Price"]), //单价 'SFU_Name' => iconv("GBK", "UTF-8", $row["OEP_User"]), //领用人 'OEP_Remark' => iconv("GBK", "UTF-8", $row["OEP_Remark"]), //备注 ); } foreach ($result as $row) { $key=0; foreach ($row as $v) { $len1 = (strlen($v) + mb_strlen($v, 'UTF8')) / 2; if ($maxColWidth[$key] < $len1) { $maxColWidth[$key] = $len1; } $key++; } } // 将获取对应的数据的列名称按顺序写好(要与$result数据一一对应) $headList = [ '序号'=>'string', '部门'=>'string', '购置时间'=>'date', '资产名称'=>'string', '数量'=>'', '单价'=>'', '领用人'=>'string', '备注'=>'string', ]; $ii=0; foreach ($headList as $key => $v){ $len1=(strlen($key) + mb_strlen($key,'UTF8')) / 2; if($maxColWidth[$ii]<$len1){ $maxColWidth[$ii]=$len1; } $ii++; } $maxWidth = 9; foreach ($maxColWidth as $key => $v){ $width = (($v * $maxWidth + 39) / $maxWidth * 256) / 256; $maxColWidth[$key] = (int)($width+0.5); if($maxColWidth[$key]>45){ $maxColWidth[$key]=45; } } set_time_limit(0); ini_set("memory_limit","512M"); $styles = array( 'font'=>'宋体','font-size'=>12,'border'=>'left,right,top,bottom','border-style' => 'thin'); $writer = new XLSXWriter(); $writer->writeSheetHeader('Sheet1', $headList, $col_options = ['widths' => $maxColWidth, 'font'=>'宋体','font-size'=>12, 'halign'=>'center','border'=>'left,right,top,bottom','border-style' => 'thin'] ); foreach($result as $row) { $writer->writeSheetRow('Sheet1', $row, $styles ); } $filename = 'download/'.get_date('YmdHis',PHP_TIME).'.xlsx'; $writer->writeToFile($filename); header('Content-type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="'.$filename.'.xls"'); $response = array( 'success' => true, 'url' => $filename ); echo json_encode($response); exit; }