Прошерстил множество тем но так и не нашел нормального описания как создать парсер данных из файла формата xls на обычноу php страницу. Просьба помочь в данном вопросе (или указать где это рассмотрено, или дать ссылки на исходники) Хочется загружать файл на хост а чтобы он сам уже отображался на странице (вся таблица из файла) Заранее благодарен
PHP: <? function startElement($parser, $name, $attrs) { echo "Element: $name<br>"; // имя элемента foreach ($attrs as $attr => $value) { // выводим имя атрибута и его значение echo 'Attribute: '.$attr.' = '.$value.'<br>'; } } function endElement($parser, $name) { } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "stringElement"); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); if (!($fp = fopen($file, "r"))) { die("Can't open XML input"); } while ($data = fgets($fp)) { if (!xml_parse($xml_parser, $data, feof($fp))) { echo "<br>XML Error: "; echo xml_error_string(xml_get_error_code($xml_parser)); echo " at line ".xml_get_current_line_number($xml_parser); break; } } function stringElement($parser, $str) { if (strlen(trim($str)) > 0) { echo 'String: '.$str.'<br>'; // выводим строку } } xml_parser_free($xml_parser); ?>
Вы привели пример парсинга XML а мне нужно из XLS спасибо за ресурс хотя на нем очень уж много ненужного мне и найти среди него нужное оказалось сложно нашел решение вот здесь http://cleverscript.ru/index.php/php/scripts-php/28-phpexel все доступно и понятно расписано
Нашел хорошее решение но столкнулся с одной маленькой проблемой. к примеру 1) если таблица в Экселе с простыми ячейками то - проблем нет. 2) если в таблице есть объединение строк - то тоже проблем нет. 3) но вот если в таблице есть объединение колонок - то начинается косяк (объеденяет не колонки а последнюю ячейку с предыдущей выше строкой) Помогите подкоректировать чтобы и колонки нормально объединял (при необходимости) вот пример кода: PHP: <? include_once 'Classes/PHPExcel/IOFactory.php'; $objPHPExcel = PHPExcel_IOFactory::load('xls/xls.xls'); $aSheet = $objPHPExcel->getActiveSheet(); $objPHPExcel->setActiveSheetIndex(0); $objWorksheet = $objPHPExcel->getActiveSheet(); $i=0; $j=0; $td_ar=array(); foreach ($objWorksheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $j=0; foreach ($cellIterator as $cell) { $td_content=$cell->getValue(); $td_ar[$i][$j] = iconv('utf-8', 'cp1251', $td_content); $j++; } $i++; } $td_clear=array(); $content=array(); $i=0; $td_row=array(); foreach ($td_ar as $tr=>$td_content) { for ($j=0; $j<count($td_content); $j++) { $content[$i][$j]=$td_content[$j]; } $i++; } krsort($content); $arr=array(); $all_ar=array(); foreach ($content as $tr=>$td_content) { for ($i=0; $i<count($td_content); $i++) { if (!isset($arr[$i])) $arr[$i]=1; if (isset($td_content[$i]) && strlen($td_content[$i])==0) $arr[$i]++; else $arr[$i]=1; $all_ar[$tr][$i]['content']=$td_content[$i]; $all_ar[$tr][$i]['row']=$arr[$i]; } } ksort($all_ar); $start_str = 0; $start_coll = 0; $content_write = "<table border=1 cellspacing=0 cellpadding=3 class=table_price>"; for ($i=$start_str; $i<count($all_ar); $i++) { $content_write .= "<tr" . ($i==$start_str?" class=title_tr":"") . ">"; $tr_border=true; for ($j=$start_coll; $j<count($all_ar[$i]); $j++) { if ((isset($all_ar[$i+1][$j]['row'])?$all_ar[$i+1][$j]['row']:1)!=1){ $tr_border=false; } if ($j==$start_coll){ $first_td=(isset($all_ar[$i+1][$j]['row'])?$all_ar[$i+1][$j]['row']:1); } if (strlen($all_ar[$i][$j]['content'])!=0){ $content_write .= "<td rowspan='" . (isset($all_ar[$i+1][$j]['row'])?$all_ar[$i+1][$j]['row']:1) . "' " . (($i!=0 && $j==0)?" class=title_td":"") . (($tr_border==true || $first_td==(isset($all_ar[$i+1][$j]['row'])?$all_ar[$i+1][$j]['row']:1))?" style='' ":"") . (((isset($all_ar[$i+1][$j]['row'])?$all_ar[$i+1][$j]['row']:1)>1)?" id='row'":"") . ">" . (($i!=0 && $j==0)?"<div>".$all_ar[$i][$j]['content']."</div>":$all_ar[$i][$j]['content']) . "</td>"; } } $content_write .= "</tr>"; } $content_write .= "</table>"; print($content_write); ?>
А при чем тут phpexcel? Вы ведь выводите информацию в виде html на страницу. Вот и смотрите, где накосячили с html-тегами. ЗЫ0. PHP: $objPHPExcel = PHPExcel_IOFactory::load('xls/xls.xls'); $aSheet = $objPHPExcel->getActiveSheet(); $objPHPExcel->setActiveSheetIndex(0); $objWorksheet = $objPHPExcel->getActiveSheet(); Зачем дважды запрашивать активный лист? PHP: $objPHPExcel = PHPExcel_IOFactory::load('xls/xls.xls'); $objPHPExcel->setActiveSheetIndex(0); $objWorksheet = $objPHPExcel->getActiveSheet(); ЗЫ1. Зря не прошли на официальный сайт. Там даже прекрасный мануал есть...
На офф сайте хоть и есть документы но они все на английском (не очень удобно для понимания) Если есть доки на русском то кинте ссылку почитаю Я понимаю что вывод таблицы это уже не парсинг, но думал мне помогут определить в каком случае и где можно сделать запись о конфигурации ячейки (соеденена она с соседней строкой или колонкой)