Не самый элегантный, но зато очень просто способ вывести файл *.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-ом друпале такое сделать?
Добавил про семерку.
зы: Не знаю, что за косяк, но после сохранения, во все незаполненные поля попал мой ник. Вроде все исправил, кроме опроса. Не знаю как его удалить.