Последнее обновление: 10.02.2013 в 21:16
Подпишись на RSS
rss Подпишитесь на RSS, чтобы всегда быть в курсе событий.

Комментарии

Присоединяйтесь к обсуждению
  • Евгений: Доброго времени суток. Кто-то подскажет, как правильно настроить вывод мета-тэгов в результатах поиска. На...
  • Евгений: Доброго времени суток. Возник вопрос по специфике движка SilverStripe. Есть основное зеркало сайта вида...
  • Вадим: Спасибо помогло, сделал так date_timezone = Europe/Kiev
  • John Doe: Не помогло, шаблон все ровно всегда такой же как у главной страницы ((
  • Алексей: Здравствуйте. Спасибо за статью. Собираюсь осваивать MODx (сейчас сижу на WP) и статья очень пригодилась!...
25 Июнь 2011 · MODx, Проекты

Раннее, я уже упоминал библиотеку для работы с Excel файлами PHPExcel. Недавно пришлось для нескольких сайтов возможность отображения данных из Excel файла. Далее этот процесс расписан по шагам. Для профессионалов эта статья вероятно не откроет ни чего нового, но вот для тех, у кого есть время только на ответы она может быть полезной Итак, для [...]


8 Январь 2009 · Без рубрики

Здравствуйте. Меня зовут Денис в определенных кругах так же известен как Widler.  О чем этот сайт, да обо мне о моей жизни, увлечениях и друзьях о том что мне интересно и людях с которыми мне интересно общаться. Мои интересы: Web-программирование и все что с ним связано Ролевые полигонные игры free-lance(да берусь за разработку сайтов подробности смотрите [...]


25 Июнь 2011

Отображаем в MODx Evo данные из excel

Раннее, я уже упоминал библиотеку для работы с Excel файлами PHPExcel. Недавно пришлось для нескольких сайтов возможность отображения данных из Excel файла. Далее этот процесс расписан по шагам. Для профессионалов эта статья вероятно не откроет ни чего нового, но вот для тех, у кого есть время только на ответы она может быть полезной


Итак, для начала скачиваемпоследнюю версию библиотеки и распаковываем её на своем компьютере. Далее на сервере в папке assets создаем новую папку lib и копируем туда папку Classes, из распакованного архива. Заходим в админку и создаем новый TV-параметр с именем xlsFile, типом File и подключаем его к нужным нам шаблонам, жмем «сохранить». После этого создаем новый сниппет с именем showXls и следующим содержимым.

require_once 'assets/lib/Classes/PHPExcel/IOFactory.php';
//получить имя файла с таблицей
$xls=$modx->getTemplateVarOutput(array('xlsFile'),$modx->documentIdentifier);
$xls=$xls['xlsFile'];
//имя файла с  таблицей в формате html
$htm=str_replace('.xlsx','.htm',$xls);
//читаем данные из xlsx файла
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load($xls);
// и записываем их в html
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'HTML');
$objWriter->setSheetIndex(0);
$objWriter->save(str_replace('.xlsx', '.htm', $xls));
// получаем данные из html файла
$table=file_get_contents($htm);
// получаем и обрабатываем таблицу стилей
$style=preg_match('|(<style [^>]+>[^<]+<\/style>)|',$table,$matches);
$style=str_replace(array('display:none;','visibility:hidden','*display:none','visibility:collapse;'),'',$matches[1]);
echo $style;
//получаем собственно ваму таблицу и выводим её
$output=substr($table,strpos($table,'<body>'),strpos($table,'</body>')-strpos($table,'<body>'));
$output=str_replace('border="0" cellpadding="0" cellspacing="0"','border="1" cellpadding="1" cellspacing="1"',$output);
//$header=$modx->getObject('modChunk',array('name'=>'tableHeader'));
echo $output;

Сохраняем сниппет, и в шаблоне или в поле content документа в месте, где должна находиться таблица вставлем вызов.
[!showXls!].
Идем во фронтенд и смотрим на результаты.
Несколько замечаний.
1) В данном примере, файл используемый для отображения должен быть сохранен в формате MS Excel 2007 XML
2) после редактирования xlsx файла и сохранения в нем оказывается 256 строк и 256 столбцов в не зависимости от того сколько ячеек заполнено в действительности. По этому редактируйте xls файл и сохраняйте как xlsx(по крайней мере если используете LibreOffice).
Конечно у данног решения полно недостатков и всё можно написать по другому. По этому жду ваших отзывов, комментариев и предложений

Читайте так же:



  • Eagel_nest

    Parse error: syntax error, unexpected T_STRING in wwwmanagerincludesdocument.parser.class.inc.php(814) : eval()’d code on line 21
    Помогите разобраться!)

    • http://loom-studio.net Denis

      Вопрос, ошибка в моем коде или у вас проблемы с установкой, если у вас скиньте, как вы подключаете сниппет на адрес loomst на gmail.com

    • http://loom-studio.net Denis

      Извиняюсь, это был мой косяк забыл закоментировать строчку.

  • http://www.blod.topsector.ru/ Виктор Черкасов

    не дошло до меня, куда файл Excel ложить и как его отобразить или сослаться на него

    • http://loom-studio.net Denis

      Для привязки и отображения файла используется переменная xlsFile при создании или редактировании документа укажите в ней какой файл надо отображать

  • Eagle_nest

    background-color:white — можно ли убрать это правило в выводимых результатах?

  • Votan_7

    Fatal error: Uncaught exception ‘Exception’ with message ‘Could not open for reading! File does not exist.’ in D:vhostssite.rusubdomainsnewhttpdocsassetslibClassesPHPExcelReaderExcel2007.php:487 Stack trace: #0 D:vhostsforestry.bysubdomainsnewhttpdocsmanagerincludesdocument.parser.class.inc.php(814) : eval()’d code(10): PHPExcel_Reader_Excel2007->load(») #1 D:vhostssite.rusubdomainsnewhttpdocsmanagerincludesdocument.parser.class.inc.php(814): eval() #2 D:vhostssite.rusubdomainsnewhttpdocsmanagerincludesdocument.parser.class.inc.php(910): DocumentParser->evalSnippet(‘??require_once …’, Array) #3 D:vhostssite.rusubdomainsnewhttpdocsmanagerincludesdocument.parser.class.inc.php(1063): DocumentParser->evalSnippets(‘parseDocumentSource(‘<!DOCTYPE html …') #5 D:vhostssite.rusubdomainsnewhttpdocsmanagerincludesdocumen in D:vhostssite.rusubdomainsnewhttpdocsassetslibClassesPHPExcelReaderExcel2007.php on line 487

    Подскажите как с этим бороться?

    • http://loom-studio.net Denis

      У меня подобная проблема была когда система не могла найти файл с таблицей. Проверьте пути если не поможет пишите будем думать дальше

  • Amigo Golds

    Добрый день подскажите как сделать отступы по краям таблицы

Мы плетем паутину
Создание сайтов для меня это не просто работа, это то, что больше всего мне нравится в этой жизни. Я постояно учусь новому и кое-что попадает на страницы этого блога. Сюда же я выкладываю свои мысли о жизни. Заходите, читайте, спрашивайте.

Счетчик