CI框架PHP导出数据为Excel,设置为文本格式,防止科学计数

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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值