게시판에서 excel 파일 업로드시 날짜관련 여쭈어 볼께요

게시판에서 excel 파일 업로드시 날짜관련 여쭈어 볼께요

QA

게시판에서 excel 파일 업로드시 날짜관련 여쭈어 볼께요

본문

그누보드 게시판 스킨 중에서 excel 게시판이 있던데 조금 응용을 했거든요

엑셀 중 필드에 날짜함수가 들어가 있는데 업로드 하면 엑셀의 날짜 함수 필드를

42780인가? 이런식으로 업로드 하더라구요,,,

이 부분을 해결해야 하는데 구글이랑 네이버 검색을 해도 원하는 답이 없어서 질문드려봅니다.

 

$wr_1이 엑셀의 날짜함수가 적용되어 있는 필드입니다.

 

소스는 아래와 같아요

<?php
include_once('./_common.php');

if(!$_POST[ex_type]){
 alert("파일유형을 선택해주세요");
}
// 상품이 많을 경우 대비 설정변경
set_time_limit ( 0 );
ini_set('memory_limit', '250M');

if(!$_FILES['excelfile']['tmp_name']) {
 alert("등록하실 파일이 없습니다");
}
if($_FILES['excelfile']['tmp_name']) {
    $file = $_FILES['excelfile']['tmp_name'];

    include_once(G5_LIB_PATH.'/Excel/reader.php');

    $data = new Spreadsheet_Excel_Reader();

    // Set output Encoding.
    $data->setOutputEncoding('UTF-8');

    /***
    * if you want you can change 'iconv' to mb_convert_encoding:
    * $data->setUTFEncoder('mb');
    *
    **/

    /***
    * By default rows & cols indeces start with 1
    * For change initial index use:
    * $data->setRowColOffset(0);
    *
    **/

 

    /***
    *  Some function for formatting output.
    * $data->setDefaultFormat('%.2f');
    * setDefaultFormat - set format for columns with unknown formatting
    *
    * $data->setColumnFormat(4, '%.3f');
    * setColumnFormat - set format for column (apply only to number fields)
    *
    **/

    $data->read($file);

    /*


     $data->sheets[0]['numRows'] - count rows
     $data->sheets[0]['numCols'] - count columns
     $data->sheets[0]['cells'][$i][$j] - data from $i-row $j-column

     $data->sheets[0]['cellsInfo'][$i][$j] - extended info about cell

        $data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
            if 'type' == "unknown" - use 'raw' value, because  cell contain value with format '0.00';
        $data->sheets[0]['cellsInfo'][$i][$j]['raw'] = value if cell without format
        $data->sheets[0]['cellsInfo'][$i][$j]['colspan']
        $data->sheets[0]['cellsInfo'][$i][$j]['rowspan']
    */

    error_reporting(E_ALL ^ E_NOTICE);
 
 
 $write_table = "g5_write_{$bo_table}";

    for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) { //$i == 몇번째 라인부터 등록할건지
        $total_count++;
  
  

  
  if($_POST[ex_type] == "2"){
   $wr_id   = addslashes($data->sheets[0]['cells'][$i][1]);    //wr_id
   $wr_subject    = addslashes($data->sheets[0]['cells'][$i][4]);    //필드1
   $wr_1    = addslashes($data->sheets[0]['cells'][$i][2]);    //필드2
   $wr_2    = addslashes($data->sheets[0]['cells'][$i][3]);    //필드2
   $wr_3    = addslashes($data->sheets[0]['cells'][$i][5]);    //필드3
   $wr_4    = addslashes($data->sheets[0]['cells'][$i][6]);    //필드4
   $wr_5    = addslashes($data->sheets[0]['cells'][$i][7]);    //필드5  
   $wr_6    = addslashes($data->sheets[0]['cells'][$i][8]);    //필드6
   $wr_7    = addslashes($data->sheets[0]['cells'][$i][9]);    //필드7
   $wr_8    = addslashes($data->sheets[0]['cells'][$i][10]);    //필드8
   $wr_9    = addslashes($data->sheets[0]['cells'][$i][11]);    //필드9
   $wr_10   = addslashes($data->sheets[0]['cells'][$i][12]);    //필드10
   $wr_11   = addslashes($data->sheets[0]['cells'][$i][13]);    //필드10
   
    $sql = " update {$write_table}
     set wr_subject = '$wr_subject',
      wr_1 = '$wr_1',      
      wr_2 = '$wr_2',
      wr_3 = '$wr_3',
      wr_4 = '$wr_4',
      wr_5 = '$wr_5',
      wr_6 = '$wr_6',
      wr_7 = '$wr_7',
      wr_8 = '$wr_8',
      wr_9 = '$wr_9',
      wr_10 = '$wr_10',
      wr_11 = '$wr_11'
     where wr_id = '$wr_id' ";
     
   sql_query($sql);
    
  }else{
   
   $mb_id = $member['mb_id'];
   $wr_name = $member['mb_nick'];
   $wr_password = $member['mb_password'];
   $wr_email = $member['mb_email'];
   $wr_homepage = $member['mb_homepage'];
   
   $wr_num = get_next_num($write_table);
   $wr_reply = '';

   $wr_id   = addslashes($data->sheets[0]['cells'][$i][1]);    //wr_id
   $wr_subject    = addslashes($data->sheets[0]['cells'][$i][4]);    //필드1
   $wr_1    = addslashes($data->sheets[0]['cells'][$i][2]);    //필드2
   $wr_2    = addslashes($data->sheets[0]['cells'][$i][3]);    //필드2
   $wr_3    = addslashes($data->sheets[0]['cells'][$i][5]);    //필드3
   $wr_4    = addslashes($data->sheets[0]['cells'][$i][6]);    //필드4
   $wr_5    = addslashes($data->sheets[0]['cells'][$i][7]);    //필드5  
   $wr_6    = addslashes($data->sheets[0]['cells'][$i][8]);    //필드6
   $wr_7    = addslashes($data->sheets[0]['cells'][$i][9]);    //필드7
   $wr_8    = addslashes($data->sheets[0]['cells'][$i][10]);    //필드8
   $wr_9    = addslashes($data->sheets[0]['cells'][$i][11]);    //필드9
   $wr_10   = addslashes($data->sheets[0]['cells'][$i][12]);    //필드10
   $wr_11   = addslashes($data->sheets[0]['cells'][$i][13]);    //필드10
   
   $sql = " insert into $write_table
                set wr_num = '$wr_num',
                     wr_reply = '$wr_reply',
                     wr_comment = 0,
                     ca_name = '$ca_name',
                     wr_option = '$html,$secret,$mail',
                     wr_subject = '$wr_subject',
                     wr_content = '$wr_subject',
                     wr_link1 = '$wr_link1',
                     wr_link2 = '$wr_link2',
                     wr_link1_hit = 0,
                     wr_link2_hit = 0,
                     wr_hit = 0,
                     wr_good = 0,
                     wr_nogood = 0,
                     mb_id = '$mb_id',
                     wr_password = '$wr_password',
                     wr_name = '$wr_name',
                     wr_email = '$wr_email',
                     wr_homepage = '$wr_homepage',
                     wr_datetime = '".G5_TIME_YMDHIS."',
                     wr_last = '".G5_TIME_YMDHIS."',
                     wr_ip = '{$_SERVER['REMOTE_ADDR']}',
                     wr_1 = '$wr_1',
                     wr_2 = '$wr_2',
                     wr_3 = '$wr_3',
                     wr_4 = '$wr_4',
                     wr_5 = '$wr_5',
                     wr_6 = '$wr_6',
                     wr_7 = '$wr_7',
                     wr_8 = '$wr_8',
                     wr_9 = '$wr_9',
      wr_10 = '$wr_10',
      wr_11 = '$wr_11'";
     
   sql_query($sql);
   
   $wr_id = mysql_insert_id();
   
   // 부모 아이디에 UPDATE
   sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");

   // 새글 INSERT
   //sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '{$bo_table}', '{$wr_id}', '{$wr_id}', '".G5_TIME_YMDHIS."', '{$mb_id}' ) ");

   // 게시글 1 증가
   //sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");
   
  }//type end
   
 
 
 }//for end

alert("업로드 되었습니다",G5_BBS_URL."/board.php?bo_table=".$bo_table);
}


?> 

 

이 질문에 댓글 쓰기 :

답변 5

엑셀 파일에서 날짜가 있는 셀을 '셀 속성'에서 텍스트로 바꿔서 저장한 후에 올려 보세요.

이게 제일 편합니다. 

텍스트로 바꿔서 진행하신 건가요?
echo $wr_1;
했을 때 값이 어떻게 나오던가요?
2016-11-11 11:11:11
이런 식으로 나오면 그냥 디비에 insert 하세요.
지금 작업하시는 데가 insert 페이지 같은데 date("Y-m-d", $wr_1) 이건 왜 하신 건가요?

텍스트로 바꾼건 아니구요 소스만 저리 해보면 어떤 결과값이 나오는지 테스트해본거에요
저 소스에다 *86400을 해보면 2086-11-4이런식으로 되더라구요 엑셀 내용 건들지 않고 해줬으면 하는 사장님의
지시때문에 머리빠질듯 해요
엑셀 날짜를 함수제거하고 텍스트로 변환하고 올려보니
정상적으로 보여지긴 합니다.
날짜함수를 그대로 쓰고 싶은데 만만치 않은것 같아요
참고로 게시판 스킨은 hs_excel 이스킨을 쓰고있어요
 
$time = ($data->sheets[0]['cells'][$i][2] - 25569) * 86400;
echo date("Y-m-d", $time);
 

엑셀에서 사용하는 timestamp 형식인가 보네요.

4 뭐시기로 시작하는...

타임스탬프가 1970년 1월 1일부터니까 엑셀에서 1970-01-01로 쓰고 이걸 셀 속성으로 값을 확인해 보면 25569가 나옵니다.
그러니 현재 값인 4... 뭐시기 - 25569를 한 다음에 실제로 php에서 쓰는 unixtime을 곱해 주면 값이 나옵니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 38
QA 내용 검색

회원로그인

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