서버가 CentOS7 환경이라면 https://link2me.tistory.com/1842 를 참고해야 한다.
웹파일 형식으로 내보내기를 하면 속도가 짱 빠르기 때문에 사용하는데 문제가 없다.
<?php
if(!isset($_SESSION)) {
session_start();
}
$file_name = "xxx_code.xls";
header( "Content-type: application/vnd.ms-excel; charset=utf-8");
header( "Cache-Control: must-revalidate, post-check=0,pre-check=0" );
header( "Content-Disposition: attachment; filename=$file_name" );
header( "Content-Description: PHP4 Generated Data" );
error_reporting(E_ALL ^ E_NOTICE);
include_once 'db.info.php';
include_once 'function/db.mysql.func.php';
$DB_CONNECT = isConnectDb($DB);
?>
윈도우10 환경하에서 인식이 제대로 안되는 현상이 생겨서 이번 기회에 엑셀 파일로 직접 저장하는 법을 찾아봤다.
엑셀로 저장하면 일단 속도가 많이 느리다.
https://github.com/PHPOffice/PHPExcel 에서 파일을 다운로드한다.
다운로드 한 파일을 압축을 풀어서 서버에 업로드한다.
아래 코드처럼 작성하면 된다.
<?php
if(!isset($_SESSION)) {
session_start();
}
if(!empty($_SESSION['userID'])){
echo "<script>window.top.location.replace('/index.php');</script>";
exit;
}
$fname="xxx_code"; // 저장할 파일명
// 파일의 저장형식이 utf-8일 경우 한글파일 이름은 깨지므로 euc-kr로 변환해준다.
//$fname = iconv("UTF-8", "EUC-KR", "한글이름");
require_once "dbconnect.php";
require_once 'phpclass/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0); //set first sheet as active
$objSheet = $objPHPExcel->getActiveSheet();
$objSheet->setTitle('코드');
$objSheet->getCell('A1')->setValue('코드');
$objSheet->getDefaultStyle('A1')->getFont()->setName('맑은 고딕');
$objSheet->mergeCells('A1:M1'); // 셀 병합
$objSheet->getStyle('A1')->getFont()->setSize(16); // 셀의 textsize
$objPHPExcel->getDefaultStyle()->getFont()->setSize(12); // 폰트 사이즈
$objSheet->SetCellValue('A2', "NO");
$objSheet->mergeCells('A2:A3'); // 셀 병합
$objSheet->SetCellValue('B2', "부서");
$objSheet->mergeCells('B2:E2');
$objSheet->SetCellValue('F2', "순서");
$objSheet->mergeCells('F2:I2');
$objSheet->SetCellValue('J2', "코드");
$objSheet->mergeCells('J2:M2');
$objSheet->SetCellValue('B3', "부서1");
$objSheet->SetCellValue('C3', "부서2");
$objSheet->SetCellValue('D3', "부서3");
$objSheet->SetCellValue('E3', "부서4");
$objSheet->SetCellValue('F3', "계위1");
$objSheet->SetCellValue('G3', "계위2");
$objSheet->SetCellValue('H3', "계위3");
$objSheet->SetCellValue('I3', "계위4");
$objSheet->SetCellValue('J3', "계위1");
$objSheet->SetCellValue('K3', "계위2");
$objSheet->SetCellValue('L3', "계위3");
$objSheet->SetCellValue('M3', "계위4");
cellColor('A2:M3', 'F28A8C'); // 헤더 배경색 지정
$i=4; // 값을 기록할 셀의 시작위치
$rowCount = 1; // 넘버링
$sql="select * from tablename where 조건";
$result=mysql_query($sql);
while($row=mysql_fetch_row($result)){
$objSheet->SetCellValue('A'.$i, $rowCount);
$objSheet->SetCellValue('B'.$i, $row[0]);
$objSheet->SetCellValue('C'.$i, $row[1]);
$objSheet->SetCellValue('D'.$i, $row[2]);
$objSheet->SetCellValue('E'.$i, $row[3]);
$objSheet->SetCellValue('F'.$i, $row[4]);
$objSheet->SetCellValue('G'.$i, $row[5]);
$objSheet->SetCellValue('H'.$i, $row[6]);
$objSheet->SetCellValue('I'.$i, $row[7]);
$objSheet->SetCellValue('J'.$i, $row[8]);
$objSheet->SetCellValue('K'.$i, $row[9]);
$objSheet->SetCellValue('L'.$i, $row[10]);
$objSheet->SetCellValue('M'.$i, $row[11]);
$i++;
$rowCount++;
}
// 표 그리기
$i--;
$objSheet->getStyle('A2:M'.$i)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
// 헤더 칼럼 가운데 정렬
$objSheet->getStyle('A2:M'.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
// 셀 높이
$objSheet->getRowDimension(1)->setRowHeight(20);
// 칼럼 사이즈 자동 조정
$objSheet->getColumnDimension('A')->setAutoSize(true);
$objSheet->getColumnDimension('B')->setWidth(18); // 칼럼 크기 직접 지정
$objSheet->getColumnDimension('C')->setWidth(18);
$objSheet->getColumnDimension('D')->setWidth(18);
$objSheet->getColumnDimension('E')->setWidth(18);
// 파일 PC로 다운로드
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename='.$fname.'.xlsx');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
$objWriter->save('php://output');
exit;
function SaveViaTempFile($objWriter){
$filePath = '/tmp/' . rand(0, getrandmax()) . rand(0, getrandmax()) . ".tmp";
$objWriter->save($filePath);
readfile($filePath);
unlink($filePath);
}
// 엑셀의 셀 배경색 지정
function cellColor($cells,$color){
global $objSheet;
$objSheet->getStyle($cells)->getFill()->applyFromArray(array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array(
'rgb' => $color
)
));
}
?>
'Web 프로그램 > 파일 다루기' 카테고리의 다른 글
[jQuery] PHP 파일 업로드 - 1 (0) | 2016.12.18 |
---|---|
PHP 파일 업로드 코딩 고려사항 (0) | 2016.07.24 |
PHP 파일 인코딩 검사 (0) | 2016.04.08 |
PHP 파일 읽어서 2중 배열 처리 (0) | 2016.03.27 |
[PHP] while 문을 이용한 파일 읽기 (0) | 2015.04.29 |