Вывести таблицу excel на страницу
Не самый элегантный, но зато очень просто способ вывести файл *.xls на страницу сайта.
Реализуется включением в тему пхп-скрипта php-excel-reader.
Шаги не относящиеся к Drupal:
- Скачиваем php-excel-reader;
- В файле excel_reader2.php меняем строку:
<?php $val = htmlentities($val); ?>
на
<?php $val = htmlentities($val, ENT_COMPAT, $this->_defaultEncoding); ?>
Иначе, могут быть проблемы с кирилицей.
Далее Drupal:
- Подключаем стандартный модуль Upload;
- Создаем тип данных для табличек;
- Создаем файл темизации для нового типа ноды;
- Файл excel_reader2.php кладем в папку с темой;
- В файл темизации добавляем код. Например, после <?php print $content ?>:
<?php
include_once "excel_reader2.php";
foreach($files as $file) {
$data = new Spreadsheet_Excel_Reader($docroot . '/' . $file->filepath, FALSE, "UTF-8");
print $data->dump(TRUE, TRUE, 0);
}
?>Если сайт лежит не в корне, подправьте путь: «'/'»
-
Расскрашиваем по вкусу:
table.excel {
border: 1px solid #CCC;
border-collapse: collapse;
}
table.excel thead th, table.excel tbody th {
background: #EEE;
border: 1px solid #CCC;
text-align: center;
vertical-align: bottom;
}
table.excel tbody th {
text-align: center;
width: 20px;
}
table.excel tbody td {
vertical-align: bottom;
}
table.excel tbody td {
padding: 5px;
border: 1px solid #EEE;
}
Вот и все. Создаете ноду и прикрепляете *.xls файл.
Drupal 7:
В семерке вместо модуля Upload используется Field. Соответственно, файлы загружаются через него. В зависимости от того, как вы назвали ваше поле, будет меняться код. Предположим, вы назвали его «xls», значит обращение к нему будет выглядеть как $node->field_xls.
foreach($node->field_xls['und'] as $file) {
$data = new Spreadsheet_Excel_Reader(drupal_realpath($file['uri']), FALSE, "UTF-8");
print $data->dump(TRUE, TRUE, 0);
}
Когда проверял работу, выяснилось, что excel_reader2 в семерке вызывает кучу ошибок, вроде обращения к неопределенным элементам массива. Исправлять все это довольно трудоемко, поэтому могу предложить только решение в лоб – отключить вывод сообщений об ошибках. Для этого нужно добавить в самом начале скрипта excel_reader2.php строку:
ЗЫ: Пара слов о параметрах, задаваемых функциям php-excel-reader:
dump([Вывести заголовок строк?]=false, [Вывести заголовок колонок?]=false, [Номер листа]=0, [Присвоить класс таблице]='excel')
Вложение | Размер |
---|---|
Пример | 16.32 КБ |
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
интересно получилось. модулей таких ещё не придумали?
Готовый модуль искал, но ничего путного не нашел.
распарсить xls интереснее, ИМХО
Было бы хорошо если была возможность работы как в гугл.док!
А эта таблица в виде картинки выходит или хтмл? Как он отобразит таблицу, если в ней несколько листов?
Таблица будет в виде html.
Отобразит тот лист, который укажешь в параметре dump().
Я наверное очень тупой, но, подскажите пожалуйста, что означает:
«Создаем файл темизации для нового типа ноды;»
Нужно создать какой-то файл, с каким-то именем в папке с темой? Как он должен называться?
node-[ВашТипМатериала].tpl.php Лежать должен в папке Вашей темы. делается по аналогии с node-.tpl.php
отличное решение! спасибо!
Огромное спасибо!
Действительно для многих случаев удачное и простое решение.
Описанно, так же все толково - у меня все заработало с первого раза.
Только файл в 1.2 Мб тяжеловато открывало...
в закладки
человек на 80% состоит из жидкости, а у меня она вообще тормозная...
node-[ВашТипМатериала].tpl.php на этот файл по идее должна быть ссылка, где она ?
далее затык на foreach($files as $file) {
warning: Invalid argument supplied for foreach() in /var/www/user_*******/data/www/мой сайт.ru/themes/ad_novus/page.tpl.php on line 67.
далее: Расскрашиваем по вкусу:
где, в каком файле, какое место ?
кажись все...
P.S. а если эксель с картинками, они будут видны ?
Я отвечал Chobo по файлу темизации.
Какая ссылка? Это файл в теме вашего сайта.
большое спасибо
оч полезная штука
в версии php-excel-reader-2.21 во втором шаге переменная $val = htmlentities($val); не окружена <?php ?>, соответственно ищем и заменяем без них(вдруг кто потеряет).
За инструкцию огромное спасибо, уже давно в закладках, но только сейчас проверил.
---
А как сделать перенос по словам в ячейке?
И есть может у кого интересная темизация таблицы(например,зебра для строк, столбцов)?
Делать dump() не всегда нужно. Можно показывать как обычную таблицу
$data = & new Spreadsheet_Excel_Reader($filename,true,"CP-1251");
$num_row = ($data->rowcount($sheet_index=0));
$num_col = $data->colcount($sheet_index=0);
while($i=0; $i <= $num_col; $i++) {
$tblheader[] = array('data', $data->val(0,$i,0));
}
?>
точно также разбираем данные например в $tblbody;
$output.= theme_table($tblheader, $tblbody);
return $output;
?>
Чего-то я не врубаюсь, а как убрать нумерацию строк и столбцов ?
<?php
print $data->dump(FALSE, FALSE, 0);
?>
или CSS
display: none;
}
замечательный хинт, но так и не смог разобраться как спрятать вывод таблицы под "Анонс".
Добавить условие:
// code...
}
Если $page = 1, значит нода загружается полностью. Если 0, то ее тизер.
>>Создаем тип данных для табличек;
какой тип данных?
Помогите с CSS!!! Плиз... Не могу понять, почему нет цветового оформления текста, заливки и обрамления ячейки
в закладки
По сабжу: http://www.drupal.ru/node/67684
Большое спасибо. Стояла задача срочно подкачать в базу данные из xls - сработало на Ура!
Кстати с легкостью "втянул" файл размером 20М.
как и куда установить socialcalc. а также все для того чтобы вставить таблицу ( 19400строк и 6 столбцов)
пытаюсь Sheetnode вставить таблицу импортом, выходит ошибка:
An error occurred. /batch?id=38&op=do
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 67 bytes) in K:\home\TatBearing\www\sites\all\Libraries\PHPExcel\Classes\PHPExcel\Worksheet.php on line 1121
А как на 7-ом друпале такое сделать?
Добавил про семерку.
зы: Не знаю, что за косяк, но после сохранения, во все незаполненные поля попал мой ник. Вроде все исправил, кроме опроса. Не знаю как его удалить.