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

EXCEL 파일 READER 에 한글 변환기능 추가
작성자 : 13 김영철
등록날짜 : 2009.01.14 23:05
3,262
<?
//
// $Id: xlsreadkr.php,v 1.1 2004/06/17 18:03:47 winchild Exp $
//
// NAME: EXCEL 파일 리더
// ARGUMENT:
//
// DESCRIPTION:
//
// REFERENCE:
//

require_once 'include/reader.php';
require_once "include/mischoi.php";

// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();


// Set output Encoding.
$data->setOutputEncoding('CP1251');

/***
* Some function for formatting output.
* $data->setDefaultFormat('%.2f');
* setDefaultFormat - set format for columns with unknown formatting
*
* $data->setColumnFormat(4, '%.3f');
* setColumnFormat - set format for column (apply only to number fields)
*
**/

// $data->read('example.xls');
// $data->read('specialformattest.xls');

// 업로드 파일 tmp 디렉토리에 저장.
// $fname = "tmp/".time().".xls";
// copy ($file, $fname);

$data->read($fname);

/*


$data->sheets[0]['numRows'] - count rows
$data->sheets[0]['numCols'] - count columns
$data->sheets[0]['cells'][$i][$j] - data from $i-row $j-column

$data->sheets[0]['cellsInfo'][$i][$j] - extended info about cell

$data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
if 'type' == "unknown" - use 'raw' value, because cell contain value with format '0.00';
$data->sheets[0]['cellsInfo'][$i][$j]['raw'] = value if cell without format
$data->sheets[0]['cellsInfo'][$i][$j]['colspan']
$data->sheets[0]['cellsInfo'][$i][$j]['rowspan']
*/
//echo 'start';

$euc_kr_base = base_convert ("8141",16,10);
$uni_no = count($uni);

$no = 0;

for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
// echo "\"".$data->sheets[0]['cells'][$i][$j]."\",";
$x = $data->sheets[0]['cells'][$i][$j];

//
// UNICODE 한글을 EUC-KR (완성형) 한글로 변환.
// EXCEL 파일을 excel reader 로 읽었을 경우 한글은 UNICODE 로
// 나타나며, 또한 바이트 오더가 뒤바뀐채로 읽힌다.
// 영문자데이터의 경우에, 한글이 섞여 있지 않으면 그냥 ASCII
// 문자로 올라오지만, 한글이 섞여 있게 되면, 0x00 이 포함되어
// 있다.
//
// 처리절차
// 1. 데이터를 스캐닝해봐서, 8비트가 세팅된 데이터가 있으면
// 한글이 포함된 데이터로 확인.
// 2. 데이터를 HEX STRING 으로 변환.
// 3. 바이트 오더를 역으로 변환.
// 4. 4자리씩 끊어서 10진수로 바꾼다음에 유니코드 테이블을 검색.
// 5. 인덱스를 찾아내게 되면 완성형문자의 베이스를 합산.
// 6. 16진수로 다시 변환.
// 7. pack() 으로 바이너리 데이터로 변환.
//

// 한글데이터가 있는지 확인
for ($k=0; $k<strlen($x); $k++)
if (ord(substr($x,$k,1))>127) break;
if ($k == strlen($x))
{
// 없으면 순수 ASCII 데이터임.
$fd_col[$j] = $x;
}
else
{

// HEX STRING 으로 변환
$x = bin2hex ($x);
// printf ("UTF-8 HEX=[%s]<br>\n", $x);

$uni_str = "";
for ($k = 0; $k < strlen($x); $k += 4)
{
// 바이트 오더를 역으로 변환
$uni_str .= substr ($x, $k+2, 2) . substr ($x, $k, 2);
}
// printf ("RESERV UTF-8 HEX=[%s]<br>\n", $uni_str);

$str = "";
for ($k = 0; $k < strlen($uni_str); $k += 4)
{
$t = substr ($uni_str, $k, 2);
if ($t == "00") // ASCII 문자에 붙는 NULL
{
$t = substr ($uni_str, $k+2, 2);
$t = base_convert ($t, 16, 10);
$str .= substr(pack("n", $t),1,1);
continue;
}

// 4자씩 끊어서 10진수로 변환
$t = substr ($uni_str, $k, 4);
$t = base_convert ($t, 16, 10);

// 유니코드 테이블 검색
for ($idx=0; $idx<$uni_no; $idx++)
if ($t == $uni[$idx]) break;

if ($idx < $uni_no)
{
// 완성형의 베이스 합산.
$t = $idx + $euc_kr_base;
$str .= pack("n", $t);
}
}
$fd_col[$j] = $str;
}
} // for ($j)

} // for ($i)

?>

출처 : Tong - ddakzzi님의 PHP통

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

Comments

번호 제목 글쓴이 날짜 조회
3015 AJAX으로 놀자~ (채팅) 13 김영철 01.29 3319
3014 PHP에서 멀티 쓰레드 흉내내기 99 단국강토 01.08 3316
3013 DLL화일 레지스트리에 등록 또는 삭제 하기 M 최고의하루 12.24 3314
3012 $PHP_SELF .... $REQUEST_URI 13 김영철 01.13 3312
3011 Ajax [www.atmarkit.co.jp] 13 김영철 01.29 3310
3010 알씨로 초간단 동영상 슬라이드쇼 만들기 99 단국강토 01.07 3310
3009 html] textbox에서 readonly, disabled 99 단국강토 01.19 3308
3008 [CSS]글씨 크기-줄 간격 조절해서 보기 좋은 문서 만들기 99 단국강토 02.09 3307
3007 부팅 안되는 XP 복구 : fixmbr 13 김영철 01.29 3306
3006 오늘 하루 창 열지 않기 M 최고의하루 12.24 3305
3005 심플한 모바일 디자인 그림. M 최고의하루 12.04 3299
3004 DOS창에서 메인보드 확인하기 2 천진난만 02.20 3292
3003 DBMS에 따른 날짜포맷 변환 99 단국강토 01.07 3291
3002 html코드표 2 아론k 06.24 3287
3001 MS-SQL JDBC "ResultSet Can Not Re-Read Row Data" 예외 처리 방법 13 김영철 01.24 3282
3000 동적 쿼리의 해결사 sp_executesql vs. exec 99 단국강토 01.02 3280
2999 리눅스 명령어 디비복구 제로보드 복구 M 최고의하루 12.24 3280
2998 [매뉴얼 정리] 오라클 백업 M 최고의하루 01.12 3279
2997 3D 문자 만들기 | 포 토 샵 [고급] 10 액션쟁이 01.05 3274
2996 실행 시간 제한 없애기 13 김영철 01.14 3273
2995 개인정보 메모장 댓글2 2 가이버김 09.14 3266
2994 Mysql 함수 총집합 13 김영철 01.29 3265
열람중 EXCEL 파일 READER 에 한글 변환기능 추가 13 김영철 01.14 3263
2992 HTML 특수문자코드표 99 단국강토 02.19 3259
2991 띠 구하는 함수 13 김영철 01.14 3257
2990 자동으로 드라이버를 알려주는 프로그램 17 vane 12.27 3257
2989 Hair[포토샵강좌][포토샵디자인/편집광고디자인/컬러리스트] 10 액션쟁이 01.02 3256
2988 SQL : INSERT : 데이터베이스 생성과 테이블 생성 13 김영철 01.23 3256
2987 [ MySQL ] MySql4.x / PHP4.x / Apache 한글깨짐 M 최고의하루 12.18 3255
2986 정규식으로 환율 구하기 13 김영철 01.15 3253
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취