영카트 5의 주문내역을 엑셀로 출력하기 위해
최신버전 adm/shop_admin/orderprintresult.php 의 107 라인 에서
echo '"'.$row['od_b_zip1'].$row['od_b_zip2'].'"'.',';
주문한 사람들의 우편번호를 출력하는데 5자리 우편번호 중 처음에 0 이 들어가면
0은 제외되고 나머지 4자리 숫자만 출력되고 있습니다.
0으로 시작되는 우편번호도 모두 5자리로 엑셀에 출력되게 하려면
echo '"'.$row['od_b_zip1'].$row['od_b_zip2'].'"'.',';
을 어떻게 수정해야 하는지 직접 코드 좀 입력해서 알려 주시면 감사하겠습니다.
답변 7개 / 댓글 6개
답변에 대한 댓글 2개
echo '"'.$row['od_b_zip1'].$row['od_b_zip2'].'"'.',';
대신 아래 코드로 해보세요.
echo '=CONCATENATE("'.$row['od_b_zip1'].'", "'.$row['od_b_zip1'].'")';
<td style="mso-number-format:'\@'" align="center"><?=$row['name']?></td>
카츠님, 감사합니다.
따옴표로 처리하는 방법으로도 만족 합니다.
카츠님, 고맙습니다. 그런데
echo '=CONCATENATE("'.$row['od_b_zip1'].'", "'.$row['od_b_zip1'].'")';
을 넣어 따라 해 보니
=CONCATENATE("108"
처럼 출력 됩니다.
이래도 안되고 저래도 안되네요.. 이거 꼭 필요한 건데요...
참고로 영카트 최신버전 전혀 손 안대고
adm/shop_admin/orderprintresult.php 의 107 라인 에 있는 겁니다.
도움을 기다립니다.
답변에 대한 댓글 1개
엑셀전용 문자열합치기 함수인 CONCATENATE() 가 적용이 안됩니다.
해당 프로그램에서 xls 파일도 제공하는데 왜 구지 csv 파일양식을 쓰시는진 모르겠지만 다음과 같이 해보세요.
echo '"\''.$row['od_b_zip1'].$row['od_b_zip2'].'\'"'.',';
상품번호나 주문번호처럼 '' (홑따옴표)로 감싸주는 형태인데요.
실제로 csv 파일은 다운받으셔서 메모장이나 에디트플러스 같은 에디터에서 열어보면 그냥 텍스트파일이나 다름없습니다. 탭 또는 ,(쉼표)를 이용해 필드구분을 해준걸 엑셀에서 인식하는 따름이라 앞에 0 이 있는걸 무시하게 되는걸 제어할 방법이 없기에 강제로 홑따옴표로 감싸주는 것입니다.
엑셀에서 우편번호를 숫자로 인식해 처리하기 때문입니다.
우편번호 앞에 공백 등을 추가해 텍스트로 인식시키도록 수정하시면 됩니다.
파일에서 ' '.$row['od_b_tel'] 와 같이 앞에 ' ' 로 공백추가하시면 됩니다.
=> "편리"님이 알려주신 내용입니다.
답변에 대한 댓글 1개
예로 든 od_b_tel 처럼 전화번호 양식에서도 0을 출력하기 위해
영카트 원본파일에도 아래와 같이 되어 있습니다. 그러나 우편번호 5자리로 바뀌면서 0으로 시작되는 게 있어 문제가 되는 것 인데, 아래 내용처럼 전화번호를 참고하여 코딩을 해야 하는 거 같은데요..
function conv_telno($t)
{
// 숫자만 있고 0으로 시작하는 전화번호
if (!preg_match("/[^0-9]/", $t) && preg_match("/^0/", $t)) {
if (preg_match("/^01/", $t)) {
$t = preg_replace("/([0-9]{3})(.*)([0-9]{4})/", "\\1-\\2-\\3", $t);
} else if (preg_match("/^02/", $t)) {
$t = preg_replace("/([0-9]{2})(.*)([0-9]{4})/", "\\1-\\2-\\3", $t);
} else {
$t = preg_replace("/([0-9]{3})(.*)([0-9]{4})/", "\\1-\\2-\\3", $t);
}
}
return $t;
}
아 죄송합니다. 저도 오랜만에 해서 약간 헷갈린듯.
공백을 로 바꿔보시겠어요?
echo " ".우편번호변수;
답변에 대한 댓글 1개
간단합니다. 숫자형이라서 앞에 0자리가 안나오는거니까, 문자형으로 넣어주시면되는데.
이럴땐, echo " ".우편번호변수;
이런식으로 앞에 공백값을 입력해주면, 문자형으로 출력이되서 0이 사라지지 않을거에요.
답변에 대한 댓글 1개
답변을 작성하려면 로그인이 필요합니다.
setCellValue('A'.$i, '=CONCATENATE("0", "1")');
이것을 어디에 어떻게 삽입하는지 잘 모르겠습니다.
현재 문제가 되는 부분은
echo '"'.$row['od_b_zip1'].$row['od_b_zip2'].'"'.','; 인데,
여기에 어떻게 수정해야 하는지요?
참고로 질문에 있는 adm/shop_admin/orderprintresult.php 의 전체 내용을 아래 붙입니다.
<?php
$sub_menu = '500120';
include_once('./_common.php');
auth_check($auth[$sub_menu], "r");
//print_r2($_GET); exit;
/*
function multibyte_digit($source)
{
$search = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
$replace = array("0","1","2","3","4","5","6","7","8","9");
return str_replace($search, $replace, (string)$source);
}
*/
function conv_telno($t)
{
// 숫자만 있고 0으로 시작하는 전화번호
if (!preg_match("/[^0-9]/", $t) && preg_match("/^0/", $t)) {
if (preg_match("/^01/", $t)) {
$t = preg_replace("/([0-9]{3})(.*)([0-9]{4})/", "\\1-\\2-\\3", $t);
} else if (preg_match("/^02/", $t)) {
$t = preg_replace("/([0-9]{2})(.*)([0-9]{4})/", "\\1-\\2-\\3", $t);
} else {
$t = preg_replace("/([0-9]{3})(.*)([0-9]{4})/", "\\1-\\2-\\3", $t);
}
}
return $t;
}
// 1.04.01
// MS엑셀 CSV 데이터로 다운로드 받음
if ($csv == 'csv')
{
$fr_date = date_conv($fr_date);
$to_date = date_conv($to_date);
$sql = " SELECT a.od_id, od_b_zip1, od_b_zip2, od_b_addr1, od_b_addr2, od_b_addr3, od_b_addr_jibeon, od_b_name, od_b_tel, od_b_hp, b.it_name, ct_qty, b.it_id, a.od_id, od_memo, od_invoice, b.ct_option, b.ct_send_cost, b.it_sc_type
FROM {$g5['g5_shop_order_table']} a, {$g5['g5_shop_cart_table']} b
where a.od_id = b.od_id ";
if ($case == 1) // 출력기간
$sql .= " and a.od_time between '$fr_date 00:00:00' and '$to_date 23:59:59' ";
else // 주문번호구간
$sql .= " and a.od_id between '$fr_od_id' and '$to_od_id' ";
if ($ct_status)
$sql .= " and b.ct_status = '$ct_status' ";
$sql .=" order by od_time asc, b.it_id, b.io_type, b.ct_id ";
$result = sql_query($sql);
$cnt = @mysql_num_rows($result);
if (!$cnt)
alert("출력할 내역이 없습니다.");
//header('Content-Type: text/x-csv');
header("Content-charset=utf-8");
header('Content-Type: doesn/matter');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Content-Disposition: attachment; filename="orderlist-' . date("ymd", time()) . '.csv"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
//echo "우편번호,주소,이름,전화1,전화2,상품명,수량,비고,전하실말씀\n";
echo iconv('utf-8', 'euc-kr', "우편번호,주소,이름,전화1,전화2,상품명,수량,선택사항,배송비,상품코드,주문번호,운송장번호,전하실말씀\n");
$save_it_id = '';
for ($i=0; $row=mysql_fetch_array($result); $i++)
{
$row = array_map('iconv_euckr', $row);
if($save_it_id != $row['it_id']) {
// 합계금액 계산
$sql = " select SUM(IF(io_type = 1, (io_price * ct_qty), ((ct_price + io_price) * ct_qty))) as price,
SUM(ct_qty) as qty
from {$g5['g5_shop_cart_table']}
where it_id = '{$row['it_id']}'
and od_id = '{$row['od_id']}' ";
$sum = sql_fetch($sql);
switch($row['ct_send_cost'])
{
case 1:
$ct_send_cost = '착불';
break;
case 2:
$ct_send_cost = '무료';
break;
default:
$ct_send_cost = '선불';
break;
}
// 조건부무료
if($row['it_sc_type'] == 2) {
$sendcost = get_item_sendcost($row['it_id'], $sum['price'], $sum['qty'], $row['od_id']);
if($sendcost == 0)
$ct_send_cost = '무료';
}
$save_it_id = $row['it_id'];
$ct_send_cost = iconv_euckr($ct_send_cost);
}
echo '"'.$row['od_b_zip1'].$row['od_b_zip2'].'"'.',';
echo '"'.print_address($row['od_b_addr1'], $row['od_b_addr2'], $row['od_b_addr3'], $row['od_b_addr_jibeon']).'"'.',';
echo '"'.$row['od_b_name'].'"'.',';
//echo '"'.multibyte_digit((string)$row[od_b_tel]).'"'.',';
//echo '"'.multibyte_digit((string)$row[od_b_hp]).'"'.',';
echo '"'.conv_telno($row['od_b_tel']) . '"'.',';
echo '"'.conv_telno($row['od_b_hp']) . '"'.',';
echo '"'.preg_replace("/\"/", """, $row['it_name']) . '"'.',';
echo '"'.$row['ct_qty'].'"'.',';
echo '"'.$row['ct_option'].'"'.',';
echo '"'.$ct_send_cost.'"'.',';
echo '"\''.$row['it_id'].'\'"'.',';
echo '"\''.$row['od_id'].'\'"'.',';
echo '"'.$row['od_invoice'].'"'.',';
//echo '"'.preg_replace("/\"/", """, preg_replace("/\n/", "", $row[od_memo])).'"';
echo '"'.preg_replace("/\"/", """, $row['od_memo']).'"';