테스트 사이트 - 개발 중인 베타 버전입니다

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

wjdgjs1982 9년 전 조회 7,203

그누보드 게시판 스킨 중에서 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개

채택된 답변
+20 포인트

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

이게 제일 편합니다. 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

w
wjdgjs1982
9년 전
$wr_1 = addslashes($data->sheets[0]['cells'][$i][2]); //필드2
$date = date("Y-m-d", $wr_1);
소스를 위처럼 했더니 php게시판에서 1970-01-01로 보여지네요...정녕 방법이 없는건가 봅니다.ㅠㅠ
왕계란
9년 전
텍스트로 바꿔서 진행하신 건가요?
echo $wr_1;
했을 때 값이 어떻게 나오던가요?
2016-11-11 11:11:11
이런 식으로 나오면 그냥 디비에 insert 하세요.
지금 작업하시는 데가 insert 페이지 같은데 date("Y-m-d", $wr_1) 이건 왜 하신 건가요?

댓글을 작성하려면 로그인이 필요합니다.

 </p><p>$time = ($data->sheets[0]['cells'][$i][2] - 25569) * 86400;</p><p>echo date("Y-m-d", $time);</p><p>
 

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

w
wjdgjs1982
9년 전
엇..위 소스는 어디서 찾으신거에요???
왕계란
9년 전
타임스탬프가 1970년 1월 1일부터니까 엑셀에서 1970-01-01로 쓰고 이걸 셀 속성으로 값을 확인해 보면 25569가 나옵니다.
그러니 현재 값인 4... 뭐시기 - 25569를 한 다음에 실제로 php에서 쓰는 unixtime을 곱해 주면 값이 나옵니다.
w
wjdgjs1982
9년 전
혹시나 싶어 엑셀 날짜함수는 기존 그대로 두고 위 적어주신대로 해봤덨니 잘 되네요ㅠㅠ
정말 감사합니다. 이 소중한 정보 잊지 않겠습니다.

댓글을 작성하려면 로그인이 필요합니다.

w
9년 전
엑셀 날짜를 함수제거하고 텍스트로 변환하고 올려보니 <br />
정상적으로 보여지긴 합니다. <br />
날짜함수를 그대로 쓰고 싶은데 만만치 않은것 같아요<br />
참고로 게시판 스킨은 hs_excel 이스킨을 쓰고있어요
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

w
9년 전

엑셀 파일인가요? 아님 엑셀 구동시키는 php파일이 필요하신건가요?

엑셀파일은 아래 링크에 걸어놓았습니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

w
9년 전
텍스트로 바꾼건 아니구요 소스만 저리 해보면 어떤 결과값이 나오는지 테스트해본거에요

저 소스에다 *86400을 해보면 2086-11-4이런식으로 되더라구요 엑셀 내용 건들지 않고 해줬으면 하는 사장님의

지시때문에 머리빠질듯 해요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

왕계란
9년 전
이건 데이타 없이는 좀 힘들겠네요.
지금 사용 중이신 엑셀 파일을 링크로 보내 보세요.
엑셀 파일 읽는 클래스가 워낙 많아서 직접 보지 않는 이상은 좀 그러네요.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인