Вывести таблицу excel на страницу

Аватар пользователя Loac Loac 8 апреля 2009 в 15:20

Не самый элегантный, но зато очень просто способ вывести файл *.xls на страницу сайта.

Реализуется включением в тему пхп-скрипта php-excel-reader.

Шаги не относящиеся к Drupal:

  • Скачиваем php-excel-reader;
  • В файле excel_reader2.php меняем строку:

    <?php $val htmlentities($val); ?>

    на

    <?php $val htmlentities($valENT_COMPAT$this->_defaultEncoding); ?>

    Иначе, могут быть проблемы с кирилицей.

Далее Drupal:

  • Подключаем стандартный модуль Upload;
  • Создаем тип данных для табличек;
  • Создаем файл темизации для нового типа ноды;
  • Файл excel_reader2.php кладем в папку с темой;
  • В файл темизации добавляем код. Например, после <?php print $content ?>:
    <?php
          
    include_once "excel_reader2.php";

          

    $docroot $_SERVER["DOCUMENT_ROOT"];
          foreach(
    $files as $file) {
            
    $data = new Spreadsheet_Excel_Reader($docroot '/' $file->filepathFALSE"UTF-8");
            print  
    $data->dump(TRUETRUE0);  
          }
    ?>

    Если сайт лежит не в корне, подправьте путь: «'/'»

  • Расскрашиваем по вкусу:
    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.

 include_once "excel_reader2.php";

  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:

Spreadsheet_Excel_Reader([Путь к файлу]='', [сохранять оформление?]=true, [кодировка на выходе]='')
dump([Вывести заголовок строк?]=false, [Вывести заголовок колонок?]=false, [Номер листа]=0, [Присвоить класс таблице]='excel')
ВложениеРазмер
Иконка изображения Пример16.32 КБ

Комментарии

Аватар пользователя Loac Loac 9 апреля 2009 в 9:18

sadmin wrote:
интересно получилось. модулей таких ещё не придумали?

Готовый модуль искал, но ничего путного не нашел.

Аватар пользователя Freedom Freedom 1 июля 2009 в 21:54

Было бы хорошо если была возможность работы как в гугл.док!
А эта таблица в виде картинки выходит или хтмл? Как он отобразит таблицу, если в ней несколько листов?

Аватар пользователя Loac Loac 1 июля 2009 в 23:02

Таблица будет в виде html.

Отобразит тот лист, который укажешь в параметре dump().

Аватар пользователя Chobo Chobo 31 июля 2009 в 23:51

Я наверное очень тупой, но, подскажите пожалуйста, что означает:

«Создаем файл темизации для нового типа ноды;»

Нужно создать какой-то файл, с каким-то именем в папке с темой? Как он должен называться?

Аватар пользователя HIgor1968 HIgor1968 3 августа 2009 в 15:18

node-[ВашТипМатериала].tpl.php Лежать должен в папке Вашей темы. делается по аналогии с node-.tpl.php

Аватар пользователя kodo kodo 23 октября 2009 в 12:49

Огромное спасибо! Smile
Действительно для многих случаев удачное и простое решение.
Описанно, так же все толково - у меня все заработало с первого раза. Smile
Только файл в 1.2 Мб тяжеловато открывало... Smile

Аватар пользователя lorgus lorgus 17 февраля 2010 в 12:15

человек на 80% состоит из жидкости, а у меня она вообще тормозная...

HIgor1968 wrote:
node-[ВашТипМатериала].tpl.php Лежать должен в папке Вашей темы. делается по аналогии с node-.tpl.php

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. а если эксель с картинками, они будут видны ?

Аватар пользователя HIgor1968 HIgor1968 18 февраля 2010 в 14:12

Я отвечал Chobo по файлу темизации.
Какая ссылка? Это файл в теме вашего сайта.

Аватар пользователя pselfin pselfin 2 июля 2010 в 16:07

в версии php-excel-reader-2.21 во втором шаге переменная $val = htmlentities($val); не окружена <?php ?>, соответственно ищем и заменяем без них(вдруг кто потеряет).
За инструкцию огромное спасибо, уже давно в закладках, но только сейчас проверил.
---
А как сделать перенос по словам в ячейке?
И есть может у кого интересная темизация таблицы(например,зебра для строк, столбцов)?

Аватар пользователя return return 3 июля 2010 в 0:46

Делать dump() не всегда нужно. Можно показывать как обычную таблицу

<?php
$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;

<?php
$output.= theme_table($tblheader, $tblbody);
return $output;
?>
Аватар пользователя toxxxa toxxxa 7 ноября 2010 в 21:24

замечательный хинт, но так и не смог разобраться как спрятать вывод таблицы под "Анонс".

Аватар пользователя Loac Loac 8 ноября 2010 в 16:23

Добавить условие:

if ($page == 1) {
  // code...
}

Если $page = 1, значит нода загружается полностью. Если 0, то ее тизер.

Аватар пользователя kisa_wp kisa_wp 22 февраля 2011 в 13:20

Помогите с CSS!!! Плиз... Не могу понять, почему нет цветового оформления текста, заливки и обрамления ячейки

Аватар пользователя mralek mralek 4 ноября 2011 в 12:00

Большое спасибо. Стояла задача срочно подкачать в базу данные из xls - сработало на Ура!
Кстати с легкостью "втянул" файл размером 20М.

Аватар пользователя borisss borisss 13 июня 2012 в 3:59

как и куда установить 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

Аватар пользователя Loac Loac 4 октября 2012 в 15:40

Добавил про семерку.

зы: Не знаю, что за косяк, но после сохранения, во все незаполненные поля попал мой ник. Вроде все исправил, кроме опроса. Не знаю как его удалить.