#1 31.07.07 20:11
[PHP]_Помогите с парсером.
Я в ПХП ноль.
Решение почти нашел но инет кончился(((
вот все файлики парсера http://freeman.hostel.nstu.ru/parser.rar
вот работающий http://freeman.hostel.nstu.ru/parser/sample/xls2html/
мне нада чтобы файлик xls с заданым именем сам без отправки парсился.
сам пробовал несколько вещей менять но увы.
вот содержимое index.html (тока форма через которую отправляется)
Код::
<form name="exc_upload" method="post" action="sample.php" enctype="multipart/form-data">
Parse style:
<select name="style">
<option value="old">ParseFromString()</option>
<option value="segment" selected>ParseFromFile()</option>
</select><br>
Excel file: <input type="file" size=30 name="excel_file">
<input type="button" value="Parse" onClick="javascript:if(document.exc_upload.excel_file.value.length==0) { alert('You must specify a file first'); return; }; submit();">
</form>тут вродекак ниче не сделаешь... нада копатся с sample.php...
вот его содержимое вместе с хтмл
Код::
<html>
<head>
<STYLE>
<!--
body, table, tr, td {font-size: 12px; font-family: Verdana, MS sans serif, Arial, Helvetica, sans-serif}
td.index {font-size: 10px; color: #000000; font-weight: bold}
td.empty {font-size: 10px; color: #000000; font-weight: bold}
td.dt_string {font-size: 10px; color: #000090; font-weight: bold}
td.dt_int {font-size: 10px; color: #909000; font-weight: bold}
td.dt_float {font-size: 10px; color: #007000; font-weight: bold}
td.dt_date {font-size: 10px; color: #008080; font-weight: bold}
td.dt_unknown {font-size: 10px; background-color: #f0d0d0; font-weight: bold}
td.empty {font-size: 10px; background-color: #f0f0f0; font-weight: bold}
-->
</STYLE>
</head>
<body bgcolor="#ffffff" text="#000000" topmargin="0" leftmargin="10" marginwidth="0" marginheight="0" link="#000000" vlink="#000000" alink="#000000">
<table width="100%" bgcolor="#006699">
<tr>
<td> </td>
<td><font size="+3" color="#FFFFFF">ABC Excel Parser Pro</font></td>
<td> </td>
</tr>
</table>
<p> </p>
<?php
require "../../excelparser.php";
////td.dt_string {font-size: 10px; color: #000090; font-weight: bold}
function getmicrotime() {
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
function uc2html($str) {
$ret = '';
for( $i=0; $i<strlen($str)/2; $i++ ) {
$charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
$ret .= '&#'.$charcode;
}
return $ret;
}
function show_time() {
global $time_start,$time_end;
$time = $time_end - $time_start;
echo "Прайс сгенерирован за $time сек.<hr size=1><br>";
}
function fatal($msg = '') {
echo '[Fatal error]';
if( strlen($msg) > 0 )
echo ": $msg";
echo "<br>\nScript terminated<br>\n";
if( $f_opened) @fclose($fh);
exit();
};
$err_corr = "Unsupported format or file corrupted";
$excel_file_size;
$excel_file = $_FILES['excel_file'];
if( $excel_file )
$excel_file = $_FILES['excel_file']['tmp_name'];
if( $excel_file == '' ) fatal("No file uploaded");
$exc = new ExcelFileParser("debug.log", ABC_NO_LOG );//ABC_VAR_DUMP);
$style = $_POST['style'];
if( $style == 'old' )
{
$fh = @fopen ($excel_file,'rb');
if( !$fh ) fatal("No file uploaded");
if( filesize($excel_file)==0 ) fatal("No file uploaded");
$fc = fread( $fh, filesize($excel_file) );
@fclose($fh);
if( strlen($fc) < filesize($excel_file) )
fatal("Cannot read file");
$time_start = getmicrotime();
$res = $exc->ParseFromString($fc);
$time_end = getmicrotime();
}
elseif( $style == 'segment' )
{
$time_start = getmicrotime();
$res = $exc->ParseFromFile($excel_file);
$time_end = getmicrotime();
}
switch ($res) {
case 0: break;
case 1: fatal("Can't open file");
case 2: fatal("File too small to be an Excel file");
case 3: fatal("Error reading file header");
case 4: fatal("Error reading file");
case 5: fatal("This is not an Excel file or file stored in Excel < 5.0");
case 6: fatal("File corrupted");
case 7: fatal("No Excel data found in file");
case 8: fatal("Unsupported file version");
default:
fatal("Unknown error");
}
/*
print '<pre>';
print_r( $exc );
print '</pre>';
exit;
*/
show_time();
echo <<<LEG
<b>Legend:</b><br><br>
<table border=1 cellspacing=0 cellpadding=3>
<tr><td>Data type</td><td>Description</td></tr>
<tr><td class=empty> </td><td class=index>An empty cell</td></tr>
<tr><td class=dt_string>ABCabc</td><td class=index>String</td></tr>
<tr><td class=dt_int>12345</td><td class=index>Integer</td></tr>
<tr><td class=dt_float>123.45</td><td class=index>Float</td></tr>
<tr><td class=dt_date>123.45</td><td class=index>Date</td></tr>
<table>
<br><br>
LEG;
for( $ws_num=0; $ws_num<count($exc->worksheet['name']); $ws_num++ )
{
print "<b>Worksheet: \"";
if( $exc->worksheet['unicode'][$ws_num] ) {
print uc2html($exc->worksheet['name'][$ws_num]);
} else
print $exc->worksheet['name'][$ws_num];
print "\"</b>";
$ws = $exc->worksheet['data'][$ws_num];
if( is_array($ws) &&
isset($ws['max_row']) && isset($ws['max_col']) ) {
echo "\n<br><br><table border=1 cellspacing=0 cellpadding=2>\n";
print "<tr><td> </td>\n";
for( $j=0; $j<=$ws['max_col']; $j++ ) {
print "<td class=index> ";
if( $j>25 ) print chr((int)($j/26)+64);
print chr(($j % 26) + 65)." </td>";
}
for( $i=0; $i<=$ws['max_row']; $i++ ) {
print "<tr><td class=index>".($i+1)."</td>\n";
if(isset($ws['cell'][$i]) && is_array($ws['cell'][$i]) ) {
for( $j=0; $j<=$ws['max_col']; $j++ ) {
if( ( is_array($ws['cell'][$i]) ) &&
( isset($ws['cell'][$i][$j]) )
){
// print cell data
print "<td class=\"";
$data = $ws['cell'][$i][$j];
$font = $ws['cell'][$i][$j]['font'];
$style = " style ='".ExcelFont::ExcelToCSS($exc->fonts[$font])."'";
switch ($data['type']) {
// string
case 0:
print "dt_string\"".$style.">";
$ind = $data['data'];
if( $exc->sst['unicode'][$ind] ) {
$s = uc2html($exc->sst['data'][$ind]);
} else
$s = $exc->sst['data'][$ind];
if( strlen(trim($s))==0 )
print " ";
else
print $s;
break;
// integer number
case 1:
print "dt_int\"".$style.">";
print (int)($data['data']);
break;
// float number
case 2:
print "dt_float\"".$style.">";
print (float)($data['data']);
break;
// date
case 3:
print "dt_date\"".$style.">";
$ret = $exc->getDateArray($data['data']);
printf ("%s-%s-%s",$ret['day'], $ret['month'], $ret['year']);
break;
default:
print "dt_unknown\"".$style."> ";
break;
}
print "</td>\n";
} else {
print "<td class=empty> </td>\n";
}
}
} else {
// print an empty row
for( $j=0; $j<=$ws['max_col']; $j++ )
print "<td class=empty> </td>";
print "\n";
}
print "</tr>\n";
}
echo "</table><br>\n";
} else {
// emtpty worksheet
print "<b> - empty</b><br>\n";
}
print "<br>";
}
/* print "Formats<br>";
foreach($exc->format as $value) {
printf("( %x )",array_search($value,$exc->format));
print htmlentities($value,ENT_QUOTES);
print "<br>";
}
print "XFs<br>";
for( $i=0;$i<count($exc->xf['format']);$i++) {
printf ("(%x)",$i);
printf (" format (%x) font (%x)",$exc->xf['format'][$i],$exc->xf['font'][$i]);
print "<br>";
}
*/
?>
<p> </p>
</body>
</html>Исправлено Freeman (01.08.07 01:28)
Offline
#2 01.08.07 10:21
Re: [PHP]_Помогите с парсером.
Ну и в чем вопрос? Не могли бы вы написать мне "скрипт"?
мне нада чтобы файлик xls с заданым именем сам без отправки парсился.
Волшебство, не иначе. Предлагаю обратиться с пожеланиями к золотой рыбке. Или в Спортлото написать.
Offline
#4 01.08.07 14:01
Re: [PHP]_Помогите с парсером.
Bred Vilchec написал(а):
Ну и в чем вопрос? Не могли бы вы написать мне "скрипт"?
Да нет, писать ничего не нада. можно было бы просто подсказать.
пару строк кода и все дела...
Что значит
с заданым именем сам без отправки парсился?
для того чтобы не использовать форму которая отправляет локальный файл методом Post
тоесть чтобы sample.php получал (или обрабатывал) .xls файл не через форму, а по заданному адресу и имени..
И я уже этот вопрос решил таким методом:
заменил вот это:
Код::
$excel_file = $_FILES['excel_file'];
if( $excel_file )
$excel_file = $_FILES['excel_file']['tmp_name'];
if( $excel_file == '' ) fatal("No file uploaded");на вот это:
Код::
if(!file_exists("Путь_мой_файл.xls")) die("Барада!!! файла нету");
$excel_file="Путь_мой_файл.xls";По поводу
Bred Vilchec написал(а):
Волшебство, не иначе. Предлагаю обратиться с пожеланиями к золотой рыбке. Или в Спортлото написать.
Если ты не пишешь на ПХП, или для тебя это сильно сложно,
или считаешь что строка твоего кода стоит немеренно денег.
Какого ...... ты пишешь в тему, заголовок которой начинается со слов
"Помогите", а само сообщение со слов "Я в ПХП ноль"?????
Offline

