PHPSpreadsheet 사용한 엑셀 업로드 (composer 없이) > 저장하자

본문 바로가기
  • 맑음
  • 경기도 (25.0'C)
  • 2024.05.02 (목)
사이트 내 전체검색

저장하자

php PHPSpreadsheet 사용한 엑셀 업로드 (composer 없이)

페이지 정보

profile_image
작성자 neue
댓글 0건 조회 2,471회 작성일 22-08-12 14:14

본문

미터강2022.04.12 21:15:50조회 801댓글 4


[code]
    require_once(G5_THEME_PATH.'/lib/PhpOffice/Psr/autoloader.php');        //설치폴더 변경시 G5_THEME_PATH 수정요함
    require_once(G5_THEME_PATH.'/lib/PhpOffice/PhpSpreadsheet/autoloader.php');    //설치폴더 변경시 G5_THEME_PATH 수정요함
    $reader = new PhpOffice\PhpSpreadsheet\Reader\Xls();    //업로드용 엑셀은 xls 입니다.
  //Xlsx로 변경시
    // $reader = new PhpOffice\PhpSpreadsheet\Reader\Xlsx();
    // //업로드용 엑셀을 받으신 후 포멧을 xlsx 로 저장하시면 됩니다.
[/code]

순서는

excel_up1.php 에서 파일을 선택(신규 데이터 입력만 구현)한 후
excel_up2.php 에서 실제 mysql로 넘어 갑니다.

 

excel_up2.php 안에  wr_subjcet의 중복체크하여 나중에 표시해 줍니다.
제가 사용하는 wr_subject는 D2022-xxxx (4개 숫자포맷으로 되어 있습니다.)
필요하신 입력폼 형태를 정의 하시고 $wr_1 ~ $wr_xxx 설정하세요

 

* 중간에 날짜형태 2022-04-12 를 PHPSpreadsheet 로 읽어 드리면
  45563 이렇게 5글자로 바뀌어서 중간에 함수를 넣어 놓았습니다.
[code]
    function time_convert($time) {  //45563 날짜값을 날짜포맷변경
        $t = ( $time - 25568 ) * 86400-60*60*9;  // 25569 : -1 daty
        $t = round($t*10)/10;
        $t = date('Y-m-d',$t);
        return $t;
    }
[/code]

그리고 중요한 것이 처음 use 선언을 하지 않으시면 에러가 납니다.
[code]
<?php
include_once('./_common.php');
use PhpOffice\PhpSpreadsheet\Spreadsheet;    //처음 선언해야 함.
use PhpOffice\PhpSpreadsheet\Reader\Xls;    //처음 선언해야 함.
//Xlsx를 사용하실려면  바꾸세요.
//use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
error_reporting(E_ALL);
ini_set("display_errors", 1);
[/code]

엑셀 자료 읽어 드릴때 array가 0 아니고 1부터 입니다.
그리고 헤더를 제외한 데이터는 2부터 입니다. (주의)
[code]
for ($i=2; $i<=count($data);$i++ ){  //실제데이터는 2부터..
[/code]

.........

excel_up2.php 수정
[code]

$wr_datetime = time_convert($data[$i]['A']);        //registerdate  -1day 읽어 오므로 +1 보정함. 함수(25569 -> 25568 )
$wr_subject = $data[$i]['C'];                     
$ca_name = $data[$i]['B'];                     
$wr_1      = $data[$i]['H'];        //위도
$wr_2      = $data[$i]['G'];        //경도             
$wr_3      = $data[$i]['F'];                      //Shape_Area
$wr_4      = $data[$i]['E'];                      //AGCLS_NM
$wr_content = $data[$i]['D'];                      //DNST_NM

....

//중복체크
$sql = "select count(wr_subject) as cnt from $write_table where wr_is_comment = 0 and wr_1 = '$wr_1' ";

.....


if($dupcount) {
//중복건수 증가
$dup_line++;
} else {
$sql = " insert into $write_table
set wr_num = '$wr_num',
wr_reply = '$wr_reply',
wr_comment = 0,
ca_name = '$ca_name',
wr_option = '',
wr_subject = '$wr_subject',
wr_content = '$wr_content',
wr_link1 = '',
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 = '$wr_datetime',
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' ";
sql_query($sql);
$wr_id = sql_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}', '{$wr_datetime}', '{$mb_id}' ) ");
// 게시글 1 증가
sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");
//업로드 건수 증가
$total_line++;
}

[/code]



테마 스킨안에 _common.php 생성해서 넣을것
[code]
<?php
include_once('../../../../../common.php');
?>
[/code]


게시판 리스트에 추가 글쓰기 바로옆에 버튼만들기
[code]
            <?php if ($is_admin) { ?><li><a href="<?php echo $board_skin_url."/excel_up1.php?bo_table=".$bo_table;?>" id="excel1" class="btn_b01 btn" title="엑셀" target="win_excel1"><i class="fa fa-table" aria-hidden="true"></i><span class="sound_only">엑셀업</span></a></li><?php } ?>


<script>
    $(function() {
        $("#excel1").click(function() {
            window.open(this.href, "win_excel1", "left=100,top=100,width=550,height=450");
            return false;
        });
    });
</script>



[/code]

첨부파일

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

공지사항

  • 게시물이 없습니다.

접속자집계

오늘
1,045
어제
1,493
최대
3,311
전체
139,111
Copyright © 소유하신 도메인. All rights reserved.

    상담 안내
  • 123.4567.8900
    평일 오전 10시 ~ 오후 6시
    점심시간 : 오후 12시 ~ 오후 1시 30분