0으로 시작하는 우편번호를 엑셀로 출력할 때

0으로 시작하는 우편번호를 엑셀로 출력할 때

QA

0으로 시작하는 우편번호를 엑셀로 출력할 때

본문

영카트 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

이전에 제가 답변달아 드린 내용과 동일한 사항인거 같네요.

아래 제가 달아드린 답변 참고해보세요. 

http://sir.co.kr/qa/66441#answer_66443 

링크 걸어주신 내용 확인했는데,

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("/\"/", "&#034;", $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("/\"/", "&#034;", preg_replace("/\n/", "", $row[od_memo])).'"';

        echo '"'.preg_replace("/\"/", "&#034;", $row['od_memo']).'"';

문의내용을 다시 읽어보니 excel라이브러리를 사용하셔서 만드신게 아니네요.

echo '"'.$row['od_b_zip1'].$row['od_b_zip2'].'"'.',';
대신 아래 코드로 해보세요.
echo '=CONCATENATE("'.$row['od_b_zip1'].'", "'.$row['od_b_zip1'].'")';​​

간단합니다.  숫자형이라서 앞에 0자리가 안나오는거니까, 문자형으로 넣어주시면되는데.

 

이럴땐,   echo " ".우편번호변수;

 

이런식으로 앞에 공백값을 입력해주면, 문자형으로 출력이되서 0이 사라지지 않을거에요.

아 죄송합니다.  저도 오랜만에 해서 약간 헷갈린듯.

공백을   로 바꿔보시겠어요?

echo " ".우편번호변수; 

엑셀에서 우편번호를 숫자로 인식해 처리하기 때문입니다.
우편번호 앞에 공백 등을 추가해 텍스트로 인식시키도록 수정하시면 됩니다.
파일에서 ' '.$row['od_b_tel'] 와 같이 앞에 ' ' 로 공백추가하시면 됩니다.

 

=> "편리"님이 알려주신 내용입니다. 

공백을 추가한다고 해결되는 게 아닙니다.

예로 든 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 '=CONCATENATE("'.$row['od_b_zip1'].'", "'.$row['od_b_zip1'].'")';

을 넣어 따라 해 보니
 

=CONCATENATE("108"

 

처럼 출력 됩니다.  

 

이래도 안되고 저래도 안되네요..  이거 꼭 필요한 건데요...

참고로 영카트 최신버전 전혀 손 안대고  

adm/shop_admin/orderprintresult.php  의 107 라인 에 있는 겁니다.  

 

도움을 기다립니다.  

알려주신 파일 열어서 확인해봤네요. 107라인은 csv 파일을 생성하는 부분이라
엑셀전용 문자열합치기 함수인 CONCATENATE() 가 적용이 안됩니다.
해당 프로그램에서 xls 파일도 제공하는데 왜 구지 csv 파일양식을 쓰시는진 모르겠지만 다음과 같이 해보세요.

echo '"\''.$row['od_b_zip1'].$row['od_b_zip2'].'\'"'.',';

상품번호나 주문번호처럼 '' (홑따옴표)로 감싸주는 형태인데요.

실제로 csv 파일은 다운받으셔서 메모장이나 에디트플러스 같은 에디터에서 열어보면 그냥 텍스트파일이나 다름없습니다. 탭 또는 ,(쉼표)를 이용해 필드구분을 해준걸 엑셀에서 인식하는 따름이라 앞에 0 이 있는걸 무시하게 되는걸 제어할 방법이 없기에 강제로 홑따옴표로 감싸주는 것입니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 0 | RSS
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT