글쓰기 / 관리자
헤니l
헤니의 개발 공부
헤니l
전체 방문자
오늘
어제
  • 분류 전체보기 (100)
    • study (46)
      • JAVA (5)
      • PHP (24)
      • JS , jQuery (7)
      • 서버 (1)
      • 코딩테스트 (9)
    • 회사일기 (1)
    • 취준 (2)
    • 인천일보아카데미 교육과정 (51)
      • 인천일보아카데미 (51)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • PHP
  • 인천일보아카데미
  • HTML공부
  • 비전공개발공부
  • php회원가입
  • php게시판
  • php게시판리스트
  • 개발공부
  • 날씨어플만들기
  • 코딩공부
  • 비전공코딩공부
  • 비전공자개발공부
  • JS
  • 비전공개발자
  • 코딩
  • 자바스크립트
  • 게시판구현
  • php계층형게시판
  • HTML
  • CSS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
헤니l

헤니의 개발 공부

study/PHP

엑셀파일 생성하기(한글 깨질때), 엑셀 다운로드

2023. 7. 26. 09:29

 

 

엑셀파일 만들때 추가해줘야하는 헤더부분 

header('Content-Type: doesn/matter');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Content-Disposition: attachment; filename="test' .date("YmdHis", time()) . '.csv"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');

 한글이 깨질때는 속성을 csv로 바꿔보고 

echo "\xEF\xBB\xBF";

 

이 echo문을 추가해보기!

 

 

이후에는select문으로 가져온 값을 저장해준다

$csvData = ""; // 빈 문자열로 초기화
$headerPrinted = false; // 헤더 출력 여부를 확인하기 위한 변수

foreach ($sql as $row) {
    // 헤더 출력
    if (!$headerPrinted) {
        $csvData .= implode(",", array_keys($row)) . "\n"; // 헤더 (키 이름들)
        $headerPrinted = true; // 헤더를 한 번만 출력하기 위해 true로 변경
    }
    // 값들 추가
    $csvData .= implode(",", array_values($row)) . "\n"; // 값들
}

 

csv형식으로 저장하기위해 키/값 을 foreach문 돌려서 저장해준다 

 

 

 


엑셀 다운로드 

 

function excel(){
    if(!confirm('다운로드 받으시겠습니까?')){
        return ;
    }
    var url ="url";
    document.location.href=url;
}

클릭시 url 이동 

 

 

 

 

include PATH_ENGIN_LIB."/PHPExcel.php";

라이브러리 추가 

 

 

 

$query = "SELECT문";
$arData = $this->db->getArray($query);

$arWork     = array();

foreach ($arData as $item) {
    $arWork[]= array(
        "id"          => $["id"],
        "name"        => $["name"],
        "cell"        => $["cell"],
               .
               .
               .
               .
    );
    
$arTitle = array("아이디","이름","연락처",);

select문으로 엑세로 만들고싶은 데이터 가져온 뒤 

1열에 담길 타이틀 만들어주기 

 

 

 

//엑셀 스타일
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->getStyle('A1:C1')->applyFromArray(
    array(
        'alignment' => array(
            'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
            'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER
        ),
        'font' => array( 'bold' => true )
    )
);
$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(30);
$oSheet = $objPHPExcel->getActiveSheet();
$oSheet->setTitle('신청내역 리스트');
$oSheet->fromArray($arTitle,NULL,'A1');

엑셀 스타일

A1셀부터 타이틀 담기 

 

 

$NO =2;
foreach($arWork AS $data){
    $arRow      = array();

    $arRow[]    = $data["id"];
    $arRow[]    = $data["name"];
    $arRow[]    = $data["cell"];

    $oSheet->fromArray($arRow,NULL,'A'.$NO);
    $NO++;
}

값 2열부터 넣어주기 

 

 

//debug("엑셀 생성완료");
$cellIterator = $oSheet->getRowIterator()->current()->getCellIterator();
$cellIterator->setIterateOnlyExistingCells( true );
/** @var PHPExcel_Cell $cell */
foreach( $cellIterator as $cell ) {
    $oSheet->getColumnDimension( $cell->getColumn() )->setAutoSize( true );
}

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header(sprintf('Content-Disposition: attachment;filename="%s_리스트 .xlsx"',date("Ymd")));
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header('Expires: Mon, 26 Jul ');
header('Last-Modified: '.gmdate('D, d M Y'));
header('Cache-Control: cache, must-revalidate');
header('Pragma: public');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;

생성완료! 

 

 

 

    'study/PHP' 카테고리의 다른 글
    • [PHP] 파일 업로드 (디렉토리, 파일명 변경), 다운로드
    • 특정 아이피로 접근 구분하기
    • [PHP] 검색 기능 구현하기
    • [PHP] mysql 에서 rownum쓰기, 게시판 글 번호 역순으로 출력
    헤니l
    헤니l

    티스토리툴바