php 에서 엑셀파일을 다운로드 받을 때 숫자(01) 값 앞의 0 이 유지되도록 하려면
아래 쪽의 빨간색 내용을 추가하시면 됩니다.
참고로 아래는 저희가 사용중인 엑셀파일 다운로드 프로그램 전체 인데요,
필요한 부분만 참고해서 사용하세요!
<?
$root = '../../';
include "{$root}db.inc.php";
include "{$root}config.inc.php";
if (!$GLOBALS['lib_insiter']->is_host($user_info['id'])) $GLOBALS['lib_common']->die_msg('실행 권한이 없습니다');
if ($_GET['file_name'] == '') $file_name = 'get_xls.xls';
else $file_name = $_GET['file_name'];
header('Content-type: application/vnd.ms-excel; charset=utf-8');
header("Content-Disposition: attachment; filename=$file_name");
header('Expires: 0');
header('Content-Description: PHP4 Generated Data');
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Pragma: public');
$xls_query = stripslashes($_GET['query']); // GET방식으로 넘어온 query값을 받는다.
if ($_GET['encode'] !== 'N') $xls_query = $GLOBALS['lib_common']->base64_decode2($xls_query); // 인코딩 여부 판단
$result = $GLOBALS['lib_common']->querying($xls_query);
// 게시판 분류를 코드가 아닌 내용으로 볼 수 있도록 하기 위한 준비
if ($_GET['chg_code'] != 'N') {
preg_match_all('|' . $DB_TABLES['board'] . '[0-9a-zA-Z_]+|', $xls_query, $sch_table);
$board = str_replace($DB_TABLES['board'] . '_', '', $sch_table[0][0]);
$board_info = $GLOBALS['lib_fix']->get_board_info($board);
for ($i=1; $i<=$GLOBALS['site_config']['bd_ct_cnt']; $i++) {
$nm_category = 'category_' . $i;
$$nm_category = $GLOBALS['lib_common']->parse_property($board_info[$nm_category], "\n", ';', '', 'N', 'N', 'Y'); // category_1 ~ category_N 의 코드와 값 배열을 가변 변수로 저장 (분류 수가 private_info.inc.php 에서 변경 될 수 있으므로)
}
}
// 엑셀의 첫번째 줄, 항목 이름 설정
$field_name = $field_info = $title_name_set = $title_name_field = array();
foreach ($_GET as $key=>$value) { // GET방식으로 넘어온 값중 키가 DBF_로 시작되는 값들을 각 항목의 타이틀로 지정
if (substr($key, 0, 4) === 'DBF_' && $value != '') {
$field_info[] = $field;
$title_name_set[] = "<td bgcolor=#C7C7C7><b>$value</b></td>";
$field_name[] = substr($key, 4); // 필드이름 저장
$title_field_set[] = '<td><b>' . substr($key, 4) . '</b></td>';
}
}
// 두번째 줄, 항목 필드명 설정
while ($field = mysql_fetch_field($result)) {
$field_info[] = $field; // 필드정보 저장
if ($_GET['all_field'] === 'Y') {
$title_name_set[] = '<td bgcolor=#C7C7C7><b>-</b></td>'; // DBF_ 로 지정되지 않은 필드명은 - 로 처리
$title_field_set[] = "<td style=mso-number-format:'\@'><b>$field->name</b></td>";
$field_name[] = $field->name; // 필드이름 저장
}
}
// 이하 내용 설정
$record_set = ''; // 레코드(tr)가 누적될 변수
while ($record_value = mysql_fetch_array($result)) {
$field_set = ''; // 레코드의 항목(td) 들이 누적될 변수
for ($i=0,$cnt=sizeof($field_name); $i<$cnt; $i++) { // 필드이름의 갯수만큼 반복
$ii = 0;
foreach ($record_value as $key=>$value) { // 레코드 중 현재 필드를 파악, 처리후 break
if (is_numeric($key)) continue; // 숫자키로 된 중복값 패스
if ($field_name[$i] != $key) continue; // 현재 필드가 아니면 패스
$T_field_value = array($record_value[$field_name[$i]]); // 현재 필드의 값을 배열로 저장 (분류의 코드값을 내용으로 변경 하기 위한 방편)
if ($_GET['chg_code'] != 'N' && substr($field_name[$i], 0, 9) === 'category_') { // 분류(category_N) 필드인 경우
$nm_category = $field_name[$i]; // 가변변수를 참조하기 위해 변수명을 텍스트로 저장
$category_array = $$nm_category; // 위에서 설정된 가변 변수 저장
if (isset($category_array)) { // $category_N 변수가 설정된 경우
$T_field_value = array(); // 위에서 지정된 값 초기화
$T_exp = explode($GLOBALS['DV']['ct2'], $record_value[$nm_category]); // 필드에 저장된 값을 ; 단위로 배열화
foreach ($T_exp as $key=>$val) if (array_key_exists($val, $category_array)) $T_field_value[] = $category_array[$val]; // 저장된 값 만큼 내용으로 변경하여 배열화
}
}
$field_value = implode(', ', $T_field_value); // 배열화된 필드 값을 문자열화
break;
$ii++;
}
// 예상되는 포맷으로 출력 값 변환
if (strpos($title_name_set[$i], '전화') !== false || strpos($title_name_set[$i], '폰') !== false || strpos($title_name_set[$i], '팩스') !== false || stripos($title_name_set[$i], 'tele') !== false || stripos($title_name_set[$i], 'phone') !== false || stripos($title_name_set[$i], 'fax') !== false) $field_value = $GLOBALS['lib_common']->get_format('phone', $field_value, '-');
if ((strpos($title_name_set[$i], '날짜') !== false || strpos($title_name_set[$i], '일시') !== false || strpos($title_name_set[$i], '시간') !== false || stripos($field_name[$i], 'date') !== false) && substr($field_value, 0, 1) !== '0' && preg_match('|^[0-9]{10}$|', $field_value)) $field_value = date($GLOBALS['site_config']['date_format'] . $GLOBALS['site_config']['date_time_div'] . $GLOBALS['site_config']['time_format'], $field_value);
$field_set .= "<td style=mso-number-format:'\@'>$field_value</td>";
}
$record_set .= "<tr>$field_set</tr>";
}
echo("
<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=utf-8'>
</head>
<body>
<table width='100%' cellpadding='0' cellspacing='0' border='1'>
<tr height='25' align='center'>
" . implode('', $title_name_set) . "
</tr>
<tr height='25' align='center'>
" . implode('', $title_field_set) . "
</tr>
$record_set
</table>
</body>
</html>
");
?>












