엑셀파일 읽어서 바로 DB에 업로드하기 정보
엑셀파일 읽어서 바로 DB에 업로드하기첨부파일
본문
db_key_value()
$db->insert()
$tools->errMsg()
등의 함수는 제가 만들어 쓰는 함수라서
DB입력 부분, alert창 부분은 자신에게 맞게 수정하셔야 해요.
PHPExcel 는 압축 풀어서 현재 디렉토리에 올리시면 됩니다.
[파일명 : content.php]
<form id="residents_excel_up" method="post" enctype="multipart/form-data" action="content_sub.php" enctype="multipart/form-data">
<input type="file" id="client_excel_file" name="client_excel_file" accept="application/vnd.ms-excel" style="display: none">
</form>
<div class="rt">
거래처 일괄 등록 (엑셀파일) :
<a class="table_top_btn" href="./download.php?file=client_list_sample.xls&url=./files/sample/client_list_sample.xls"><i class="fa fa-download" style="color:#00a5ba;"></i> 샘플파일 다운로드</a>
<span class="table_top_btn" onclick="resident_info_lists_up()"><i class="fa fa-upload" style="color:#00a5ba;"></i> 파일등록</span>
</div>
<script>
$("#client_excel_file").change(function(e) {
if ($(this).val() == '') {
alert('파일 없음');
return false;
}
// 폼전송
var formData = new FormData($("#residents_excel_up")[0]);
$("#residents_excel_up").submit();
});
function resident_info_lists_up(){
$("#client_excel_file").click();
}
</script>
[파일명 : content_sub.php]
<?php
include_once('./_common.php');
$upfile_dir = "./files";
// 현장 파일업로드 처리
$upfile_name = $_FILES['client_excel_file']['name']; // 파일이름
$upfile_type = $_FILES['client_excel_file']['type']; // 확장자
$upfile_size = $_FILES['client_excel_file']['size']; // 파일크기
$upfile_tmp = $_FILES['client_excel_file']['tmp_name']; // 임시 디렉토리에 저장된 파일명
// 등록하려는 파일을 현재 자료실의 지정디렉토리에 저장
if(!copy($_FILES['client_excel_file']['tmp_name'],"$upfile_dir/$upfile_name")) {
//echo"<script>alert('엑셀 업로드에 문제가 발생했습니다.');</script>";
$tools->errMsg("엑셀 업로드에 문제가 발생했습니다.");
}
if(preg_match("/(\.(csv|CSV|xls|xlsx))$/i",$upfile_name)) {
} else {
echo ("<script>window.alert('업로드를 할수 없는 파일 입니다.\\n\\r확장자가 csv,xls,xlsx 인 경우만 업로드가 가능합니다.'); history.go(-1) </script>");
exit;
}
if ($upfile_name) {
$Result = array(
'In_Data' => array(
'Same' => 0, // 성공 갯수
'Success' => 0, // 실패 갯수
'Failed' => array() // 실패한 경우의 배열
)
);
// 저장된 파일을 읽어 들인다
$filename = $upfile_dir . "/" . $upfile_name; // 읽어들일 엑셀 파일의 경로와 파일명을 지정한다.
require_once "./PHPExcel/Classes/PHPExcel.php"; // PHPExcel.php을 불러옴.
$objPHPExcel = new PHPExcel();
require_once "./PHPExcel/Classes/PHPExcel/IOFactory.php"; // IOFactory.php을 불러옴.
//try {
$objReader = PHPExcel_IOFactory::createReaderForFile($filename); // 업로드 된 엑셀 형식에 맞는 Reader객체를 만든다.
$objReader->setReadDataOnly(true); // 읽기전용으로 설정
$objExcel = $objReader->load($filename); // 엑셀파일을 읽는다
$objExcel->setActiveSheetIndex(0); // 첫번째 시트를 선택
$objWorksheet = $objExcel->getActiveSheet();
$rowIterator = $objWorksheet->getRowIterator();
foreach ($rowIterator as $row) { // 모든 행에 대해서
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
}
$maxRow = $objWorksheet->getHighestRow(); // 마지막 행
$suc = 0;
$sam = 0;
$fail = 0;
for ($i = 2; $i <= $maxRow; $i++) {
$dataA = $objWorksheet->getCell('A' . $i)->getValue(); // A열
$dataB = $objWorksheet->getCell('B' . $i)->getValue(); // B열
$dataC = $objWorksheet->getCell('C' . $i)->getValue(); // C열
$dataD = $objWorksheet->getCell('D' . $i)->getValue(); // D열
$dataE = $objWorksheet->getCell('E' . $i)->getValue(); // E열
$dataF = $objWorksheet->getCell('F' . $i)->getValue(); // F열
$dataG = $objWorksheet->getCell('G' . $i)->getValue(); // G열
$dataH = $objWorksheet->getCell('H' . $i)->getValue(); // H열
$dataI = $objWorksheet->getCell('I' . $i)->getValue(); // I열
if ($dataB) {
$org_business = $dataB;
$rep_business = str_replace("-", "", $dataB);
$cnt_before = $db->cnt('거래처관리', 'where 사업자번호 = "' . $org_business . '" or 사업자번호 = "' . $rep_business . '"');
if ($cnt_before > 0) {
$Result['In_Data']['Same']++;
continue;
} else {
$client_data = array(
'거래처명' => $dataA,
'사업자번호' => $dataB,
'대표자' => $dataC,
'업태' => $dataD,
'종목' => $dataE,
'주소' => $dataF,
'전화번호' => $dataG,
'팩스' => $dataH,
'이메일' => $dataI,
'입력일' => date('Ymd'),
'signdate' => time()
);
$result = $db->insert("거래처관리", db_key_value($client_data));
if ($result) {
$Result['In_Data']['Success']++;
} else {
$Result['In_Data']['Failed'][] = $dataB;
}
}
}
}
}
if(!unlink($filename)){ $tools->msg("파일삭제 안됨(unlink)"); }
?>
<script>
alert('처리되었습니다!\n\n성공: ' + <?php echo $Result['In_Data']['Success']; ?> + '\n실패: ' + <?php echo count($Result['In_Data']['Failed']); ?> + '\n중복: ' + <?php echo $Result['In_Data']['Same']; ?>);
location.href='gurelist.php';
</script>
9
댓글 7개
감사합니다 ^^
유용한 팁 공유.. 감사드립니다 추천꾹!!
정말 꼭 필요하고, 유용한 팁 감사 드립니다.
압축을 풀어서 현재 디렉토리에 올리라고 하셨는데요.
현재 디렉토리라는 것이 적용된 스킨 폴더에 올리면 되는 것일까요?
@동물원 그누보드 최 상위 업로드 후 excel_upload.php 에서
2번째 라인:
include $_SERVER["DOCUMENT_ROOT"]."/theme/s007/PHPExcel/PHPExcel.php";
을 아래와 같이 경로 수정
include $_SERVER["DOCUMENT_ROOT"]."/PHPExcel/PHPExcel.php";
관련 팁좀 찾다가 보여 적어봅니다.
@Gothrock 감사합니다.
감사합니다~
마침 비슷한 자료를 찾고 있었는데 감사드립니다.