728x90

엑셀데이터를 MYSQL DB Import (Update)



DB 데이터가 잘못된 것이 있어서 엑셀로 내보내기를 한 다음 엑셀에서 작업을 한 후 수정된 부분만 다시 DB에 업데이트를 하고 싶다.

어떤 방법을 택하면 편할까 하는 생각을 했지만 내가 아는 수준이 미약한지라 아주 허접한 방법으로 시도를 하기로 했다.


먼저 엑셀에서 필요한 부분만 남기고 나머지는 모두 삭제한다.

이 데이터를 아래 VBA 코드를 이용하여 내보내기를 한다.

Sub TextExport()
'// Export Each Sheet As Text File
   Dim rng As Range
   Dim iRow As Long, iCol As Integer
   Dim sTxt As String, sPath As String
   Dim ff As Integer

   ff = FreeFile
    sPath = ThisWorkbook.Path & "\"
    Open sPath & ActiveSheet.Name & ".csv" For Output As #ff
    Set rng = ActiveSheet.UsedRange

    deLimiter = ";"     '// 구분자

    For iRow = 2 To rng.Rows.Count  '// 2행부터 마지막 행까지
        For iCol = 1 To rng.Columns.Count  '// 1열부터 오른쪽 최대 열까지
            sTxt = sTxt & ActiveSheet.Cells(iRow, iCol).Value & deLimiter
        Next iCol
        Print #ff, Left(sTxt, Len(sTxt) - 1)

       sTxt = vbNullString
    Next iRow
    Close #ff   '// 작업을 마치고 파일을 닫는다   
    MsgBox "내보내기 완료"
End Sub

그러면 파일에 2번째 행부터 마지막 행까지 내보내기가 된다.


파일 내보내기가 완료되었으므로 이제 서버의 MYSQL 로 데이터를 업데이트 하기 위한 과정이 필요하다.


<?
########## KIMSQRB와 DB연동 ##########
defined('__KIMS__');
session_start();
error_reporting(E_ALL ^ E_NOTICE);

include_once '/_var/db.info.php';
include_once '/_core/function/db.mysql.func.php';   
$DB_CONNECT = isConnectDb($DB);
########### DB 연동 정보 가져오기 끝 ###########
$tblName = data;    // 테이블명

$file=fopen("data.csv","r"); // 엑셀로 내보낸 파일명을 적어준다
if(!$file) {
    echo("Failed to open the file");
    exit;
}

$total_line = 0;
while($line = fgetcsv($file,1000, ";")) { // 구분자는 ; 로 지정, 한줄씩 읽어드린 값을 1000 라인까지 계속하라.
    // 조건에 맞는 것만 필드 업데이트 하기
    $result = mysql_query("Update $tblName SET subject = '$line[1]' Where uid = '$line[0]'",$DB_CONNECT);
$total_line++;
}

echo("총 $total_line Update");
fclose ($file);
?>


바로 위 PHP 소스코드와 data.csv 파일을 서버에 업로드한다음에 실행하면 업데이트가 된다.

PHP 소스코드는 DB를 연동하고 fopen 으로 파일을 열어서 while 문으로 업데이트한다.

파일에서 가져온 데이터 값은 line[0], line[1] 로 읽어들인다.


이 방법으로 했더니 1000 개 정도 되는 데이터를 순식간에 업데이트했다.


블로그 이미지

Link2Me

,