EXCEL 파일 READER 에 한글 변환기능 추가
작성자 : 김영철
등록날짜 : 2009.01.14 23:05
<?
//
// $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)
?>
//
// $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)
?>
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|