php PHPSpreadsheet 사용한 엑셀 업로드 (composer 없이)
페이지 정보
본문
미터강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]
[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]
첨부파일
-
xls97up.7z (1.0M)
0회 다운로드 | DATE : 2022-08-12 14:14:06
관련링크
-
https://sir.kr/g5_tip/18312
402회 연결
- 이전글여분필드에 스마트 에디터 사용하기 22.08.12
- 다음글new.php 이미지출력 및 댓글제외 관련 22.07.18
댓글목록
등록된 댓글이 없습니다.