[WORDPRESS로 환자 DATABASE 만들기] #6. 엑셀(excel) 출력

마지막 포스팅

Excel 출력을 위한 준비물

phpExcel이라는 Library를 사용한다.

https://phpexcel.codeplex.com/

압축파일을 열어보면 설명이 대강 되어있는데, 간단하게 Classes라는 폴더를 wamp/www (혹은 사용하는 서버의 가장 앞쪽 폴더?) 위치에 두면 된다.

혹시 로딩이 안되면 아래 파일의 경로를 바꾸면 된다.

require_once dirname(__FILE__) . ‘/../Classes/PHPExcel.php’;

WordPress 외부 접근

용어가 적절한지 모르겠다. 다만 이전의 그누보드의 경우에서 보면 common.php 를 이용해서 게시판 외적으로 접근이 가능했는데, 워드프레스도 비슷한 방식으로 가능하다.

require_once( dirname( __FILE__ ) . '/wp-load.php' );

global $user_ID;
if (!is_user_logged_in()){
    die("You Must Be Logged In to Access This");
}
if( ! current_user_can('edit_files')) {
    die("Sorry you are not authorized to access this file");
}

내가 만든 코드는 로그인을 안하고 이 페이지를 들어오게되면 안되게 해놨다.

그리고 아래 코드들은 그냥 예제로 만들어진 코드를 간단히 수정해본 소스다.

xls 파일 출력

require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';

// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="export_data.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set document properties
$objPHPExcel->getProperties()->setCreator("Junn")
							 ->setLastModifiedBy("Junn")
							 ->setTitle("Office 2007 XLSX Test Document")
							 ->setSubject("Office 2007 XLSX Test Document")
							 ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
							 ->setKeywords("office 2007 openxml php")
							 ->setCategory("Test result file");

// Get all posts
$patients = $wpdb->get_results('SELECT * FROM '. $wpdb->prefix.'posts' .' WHERE `post_type` = \'patients\'');

if($patients)
{
	$i =0;
	foreach ($patients as $patient)
	{			
		$i++;
		$pts_id_row = $wpdb->get_row('SELECT * FROM '. $wpdb->prefix.'postmeta' .' WHERE `post_id` = '.$patient->ID.' AND `meta_key` = \'pts_id\'');		
		$objPHPExcel->setActiveSheetIndex(0)
	            ->setCellValue('A'.$i, $pts_id_row->meta_value)
	            ->setCellValue('B'.$i, $patient->post_date);	            
	}
}

$objPHPExcel->getActiveSheet()->setTitle('Simple');
$objPHPExcel->setActiveSheetIndex(0);

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

exit;

그리하여 출력된 파일의 결과는 다음과 같다.

Untitled-114


마무리하며

워드프레스로 환자데이터베이스 만들면 다양한 장점이 있다.

  • 첫번째는 백엔드를 거의 신경쓰지 않을 수 있으며,
  • 무엇보다도 일단 기존의 테마를 이용하기 때문에 디자인에 크게 신경을 쓰지 않아도 된다.
  • 소요시간을 획기적으로 줄일 수 있다.
    • 이전에 작업할 때를 생각해보면 발주자가 뭔가 추가하고 싶은 데이터가 생기면, 그에 따른 모든 SQL구문까지 다 수정을 하고, 오류가 없는지, 오타는 없는지 확인해야 했는데 이런 부분에서 쓸데없는 시간 소요가 줄어드는 듯 하다.

 

Leave a Reply

Your email address will not be published.