CI框架PHP导出数据为Excel,设置为文本格式,防止科学计数
注意一下代码是在CI框架下。
public function export($title, $headArr, $excel_data, $excel_title =array()){
set_time_limit(0);
ini_set('memory_limit', '512M');
$CI = &get_instance();
$CI->load->library('PHPExcel');
$objPHPExcel = $CI->phpexcel;
$date = date("Y_m_d", time());
$fileName = $title . "_{$date}.xlsx";
//创建PHPExcel对象
$objProps = $objPHPExcel->getProperties();
// 得到表格对象
$objActSheet = $objPHPExcel->getActiveSheet();
$objActSheet->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objActSheet->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objActSheet->getDefaultStyle()->getAlignment()->setWrapText(true);
//设置表头
$key = ord("A");
$count = !empty($excel_title) ? 2 : 1;
foreach ($headArr as $k => $v) {
$colum = chr($key);
if (!empty($excel_title)) {
foreach ($excel_title as $ek=>$ev) {
$tempArr = explode(':', $ev);
$tempKey = ord($tempArr[0]);
$tempColum = chr($tempKey);
$objActSheet->mergeCells($ev);
// 设置左边框
$objActSheet->getStyle($tempColum . '1')->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objActSheet->getStyle($tempColum . '1')->getFont()->setBold(true);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($tempColum . '1', $ek);
}
}
if (is_numeric($k)) {
$colTitle = $v;
$colWidth = '';
} else {
$colTitle = $k;
$colWidth = $v;
}
if (empty($colWidth)) {
$objActSheet->getColumnDimension($colum)->setAutoSize(true);
} else {
$objActSheet->getColumnDimension($colum)->setWidth($colWidth);
}
// 设置左边框
$objActSheet->getStyle($colum . $count)->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objActSheet->getStyle($colum . $count)->getFont()->setBold(true);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . $count, $colTitle);
$key += 1;
}
// 数据从第二行开始输出
$column = $count+1;
foreach ($excel_data as $key => $rows) {
//行写入
$span = ord("A");
foreach ($rows as $keyName => $value) {
// 列写入
$j = chr($span); //列号
//设置为文本格式
$objActSheet->setCellValueExplicit($j . $column, $value,PHPExcel_Cell_DataType::TYPE_STRING);
$span++;
}
$column++;
}
$fileName = iconv("utf-8", "gb2312", $fileName);
//重命名表
$objPHPExcel->getActiveSheet()->setTitle($title);
//设置活动单指数到第一个表,所以Excel打开这是第一个表
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment;filename=\"$fileName\"");
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output'); //文件通过浏览器下载
}
调用
$title = '文件名';
$headArr = array('字段1' => 20, '字段2' => 12);
$this->export($title, $headArr, $query);