강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

[엑셀과 mysql의 데이터이동]
작성자 : 13 김영철
등록날짜 : 2009.01.14 22:29
3,152
[엑셀과 mysql의 데이터이동]

엑셀의 데이타는 .xls라는 확장자이다.

보통 엑셀에서 로딩을 한후 다른이름으로 저장시 탭으로 분리되는 txt와 콤마로 분리되는 csv파일로 저장할 수 있다.

둘다 곧바로 mysql에는 load문으로 입력할 수 있다.

 당연히 table구조도 엑셀구조와 같아야 한다.

하지만 곧바로 넣기전에 약간의 가공이 필요하다면 중간에 php스크립트로 처리를 해서

sql파일로 만들어서 복원하는게 좋다.

그리고 반대로 mysql에서 엑셀로의 방법도 여러가지이다.

데이타를 뽑아내서 table을 만들어 상단에 엑셀다운해더를 추가해서 다운을 받게 하는 방법과

 

ex) 상단에 다음의 소스를 기술하며 filename부분을 filename.xls(엑셀) filename.txt(텍스트파일)

filename.cvs(cvs파일)로 원하는 다운 파일로 바꾼후

 

엑셀ex) 탭으로 나눔

header( "Content-type: application/vnd.ms-excel; charset=ks_c_5601-1987" );
header( "Content-Disposition: attachment; filename=leejunsik.xls" );

header( "Content-Description: PHP4 Generated Data" );

echo "a\ta\ta\ta\ta\r\n";
echo "a\ta\ta\ta\ta\r\n";

 

cvs ex) 쉄표로 나눔(,)

header( "Content-type: application/vnd.ms-excel; charset=ks_c_5601-1987" );
header( "Content-Disposition: attachment; filename=leejunsik.cvs" );

header( "Content-Description: PHP4 Generated Data" );

echo "a,a,a,a,a\r\n";

echo "a,a,a,a,a\r\n";


 

txt ex) 탭으로 나눔

header( "Content-type: application/vnd.ms-excel; charset=ks_c_5601-1987" );
header( "Content-Disposition: attachment; filename=leejunsik.txt" );

header( "Content-Description: PHP4 Generated Data" ); 

echo "a\ta\ta\ta\ta\r\n";
echo "a\ta\ta\ta\ta\r\n";

 

mysql데이타를 뽑아내서 파일에 tab으로 나누면서 파일에 써서 txt로 저장하거나 ,로 분리해서

파일에 저장하여 scv로 만들어서 엑셀에서 로딩해도 된다.

 

엑셀_html형식으로 ex)html문법 사용

<?
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=leejunsik.xls");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Pragma: public");

?>


순번
이름


 001
순신
노량해전

 

방법1

$srcfn = "dat.txt";
$linebuf = file($srcfn);

//파일의 내용을 배열로 \n단위로 잘라서 대입한다.(좋은함수)

$fp = fopen("insert.sql","w");

//쓰기 모드로 없으면 만들며 있으면 덮어쒸운다.

for($i=0;$i$tok = explode("\t",$linebuf[$i]);

$aaa=trim($tok[0]);

//빈공간제거
$bbb=trim(ereg_replace(",","", $tok[1]));

//빈공간제거와,제거

...
$ccc=trim($tok[7]);

$query = "INSERT INTO table (aaa, bbb, ..., ccc) VALUES ($aaa, '$bbb', ..., '$ccc');";

fputs($fp,$query,strlen($query));
fputs($fp,"\n",strlen("\n"));

//입력시 엔터를 줘야 줄바꿈을 한다.
}

fclose($fp);

 

방법2

$file = "경로/파일.csv";
$fp = fopen($file,"r");
$data = "";
while($buffer = fread($fp,4096)) $data .= $buffer;
$rows = explode("\n",$data); // 한줄씩 나눠서 배열에 저장
for($i=0; $i$field = explode(",",$rows[$i]);
$sql = "insert into table values('$field[0]', '$field[1]', '$field[2]', '$field[3]')";
mysql_query($sql);
}

 

방법3

csv를 이용하는 것은 특정 목록을 PHP에서 불러다가 인식하여 처리하기가 편하기 때문입니다.
csv 파일을 열어보면 레코드가 줄별로 나누어지고 한 행은 ,(콤마)를 기준으로 필드가 나누어서 저장이 됩니다.
a, 1, 1, 1
b, 2, 2, 2
c, 3, 3, 3
위와 같이 저장이 된 csv 파일이 있다면 이것을 php에서는 fopen()함수를 이용하여 불러들입니다.
$file = "경로/파일.csv";
$fp = fopen($file,"r");
$data = "";
while($buffer = fread($fp,4096)) $data .= $buffer; //모든자료받아옴
$rows = explode("\n",$data); // 한줄씩 나눠서 배열에 저장
for($i=0; $i$field = explode(",",$rows[$i]);
$sql = "insert into table values('$field[0]', '$field[1]', '$field[2]', '$field[3]')";
mysql_query($sql);
}
file 함수로 이용하시면 편리합니다.
예)
while ($line = file($file)) {
$value = str_replace(",","','",$line);
$sql = "insert into table values('".$value."')";
mysql_query($sql);
}

**csv보다는 txt파일이 좋은이유는 단어 중에 , 가 들어있으면 그것도 분리가 되서

에러가 날가망성도 있다. txt파일에서의 탭(\t)은 보통 입력을 안하므로 위에 오류가 일어날

확률이 적다

출처 : Tong - 드렁크수달스님의 ■ PHP ■통

 

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
3075 [ JSP ] 브라우저 인코딩이 자동으로 한글이 안되는 경우 해결법 99 단국강토 01.02 3050
3074 [ JS ] 버튼을 이용한 이미지 넘기기 ( 이미지 리스트 ) 99 단국강토 01.02 2747
3073 [AJAX] 자바스크립트에서 XML 파일 읽어 오기 99 단국강토 12.30 2863
3072 [AJAX] DOMDocument 에서 selectSingleNode 을 이용한 XML 노드 (Node) 찾기 99 단국강토 12.30 2778
3071 [ JS , AJAX ] DOM 크로스브라우징 : 원하는 노드 찾기 [ createDocument , DOMDocument ] M 최고의하루 12.26 2525
3070 외부링크 금지하는 방법 M 최고의하루 12.26 2631
3069 오늘 하루 창 열지 않기 M 최고의하루 12.24 2785
3068 DLL화일 레지스트리에 등록 또는 삭제 하기 M 최고의하루 12.24 2798
3067 팝업창 닫고 프레임이 있는 부모창에서 원하는 페이지로 이동하기 M 최고의하루 12.23 5284
3066 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-2 M 최고의하루 12.23 2419
3065 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1 M 최고의하루 12.23 9482
3064 [펌] 제12강 - 방명록 만들기 I M 최고의하루 12.23 5102
3063 [펌] 제13강 - 방명록 만들기 II M 최고의하루 12.20 4522
3062 [펌] 제14강 - 방명록 만들기 III M 최고의하루 12.20 2658
3061 [펌] 제15강 - 방명록 만들기 IV M 최고의하루 12.19 2575
3060 [펌] 제16강 - 방명록 만들기 V M 최고의하루 12.19 2339
3059 제17강 - 방명록 만들기 VI M 최고의하루 12.18 2419
3058 [펌] 제18강 - 방명록 만들기 VII M 최고의하루 12.04 2537
3057 아작스관련 코드 링크들 M 최고의하루 12.04 2603
3056 배열 사용 13 김영철 01.14 2928
열람중 [엑셀과 mysql의 데이터이동] 13 김영철 01.14 3153
3054 액티브X IE 패치에 따른 자동 자바스크립트 출력 소스 (회피법) 13 김영철 01.14 2078
3053 익스플로러(IE)플러그인ActiveX액티브엑스활성화특허침해에따른 설계변경패치에대한 개발코딩간편변경방법 13 김영철 01.14 3369
3052 PHP has encountered an Access Violation at 에러 구문 13 김영철 01.14 2770
3051 PHP.INI 설정에 따른 변수 이름 바꾸기 13 김영철 01.14 3183
3050 휴대폰 하이픈 처리 함수 13 김영철 01.14 2757
3049 POST , GET 으로 변수 전달 안될때 13 김영철 01.14 3157
3048 라이오 버튼 디버깅용 체크여부 확인 13 김영철 01.14 3195
3047 특정부분만 프린트하기 13 김영철 01.14 2842
3046 위지에디터 모음 13 김영철 01.14 2608
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취