엑셀파일 읽어서 바로 DB에 업로드하기

by 조쉬 posted Apr 09, 2024
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

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>