САЙТОСТРОЙ.РУ

Разработка сайта любой сложности собственными силами - такова задача создателей сайта. Представлены лучшие советы вебмастеров, образцовые технические задания, бесценный опыт веб-мастеринга и советы в области безопасности сайтов, новые технологии веб, инструменты продвижения сайтов. Теперь создание сайтов не будет для Вас загадкой!

Построй свой сайт!

Импорт данных из таблиц Excel


Автоматический импорт данных на сайт из файла Excel стал возможен благодаря разработке модуля Spreadsheet_Excel_Reader, который доступен в виде открытой библиотеке для разработок на языке PHP (http://pear.php.net/package/Spreadsheet_Excel_Reader). Автор модуля взял на себя титаническую работу по обработке структуры данных этого непростого формата, поэтому нам остается в удобной объектно-ориентированной форме пользоваться его возможностями. Скрипт воспринимает только текстовые поля таблиц, а также числовые, поля даты и "сырые" данные (необработанные данные в формате файла Excel).

Исходная таблица Excel

К сожалению, парсер воспринимает форматы таблиц от Excel95 до Excel 2003. Более старые версии могут интерпретироваться неправильно, вызывать зависание скрипта или сбой кодировки файла. Это ситуацию можно решить конвертированием в один из перечисленных форматов.

Алгоритм импорта данных

Импорт данных из таблицы состоит из двух этапов: загрузка данных из файла и последующая обработка массива с полученными данными. При этом в качестве входных параметров модуль получает файл Excel (.xls) и кодировку для отображения. Для кирилических сайтов эта кодировка обычно Windows-1251, или в формате модуля - CP1251 (CP - это "codepage", что значит "кодировка").

Подключение модуля

После того, как файл будет загружен на сервер (эту часть можно реализовать вольным образом, мы ее опустим), путь к нему - в нашем случае $importfile - необходимо передать на обработку скрипту:

require_once "Excel/reader.php";
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding("CP1251");
$data->read($importfile);
unlink($importfile);

После этого в массиве $data окажутся загруженными данные из таблицы: листы таблицы, в них строки и ячейки.

Обработка полученных данных

Будем считать, что целью обработки данных для нас будет служить их отображение на странице. Для этого запустим цикл: переберем строки, в которых переберем столбцы. Общее число столбцов для первого листа (идентификатор 0) содержится в переменной $data->sheets[0]["numCols"], а общее число строк в $data->sheets[0]["numRows"]. В переменной $data->sheets[0]["cells"][$i][$j] содержится значение ячейки таблицы.

Итак, наш код будет выглядеть следующим образом:

echo "<table width="100%" cellpadding="2" cellspacing="2" border="1">";
    for ($i=1; $i<=$data->sheets[0]["numRows"]; $i++)
    {
        echo "<tr> ";
                    
        for ($j=1; $j<=$data->sheets[0]["numCols"]; $j++)
        {
            if(isset($data->sheets[0]["cells"][$i][$j]))
            {
                $celldata=$data->sheets[0]["cells"][$i][$j];
            }
            else
            {
                $celldata="";
            }
                
            echo "<td>${celldata}</td> ";
        }
        echo "</tr> ";
    }
echo "</table>";

Результат работы скрипта

Обратите внимание, что мы осуществляем проверку на наличие данных в ячейке. Кроме того, Вам может понадобиться проверка данных, хранящихся в ячейке. Эти сведения содержатся в переменной $data->sheets[0]["cellsInfo"][$i][$j]["type"]: "date", "number", или "unknown". Необработанное значение ячейки содержится в переменной $data->sheets[0]["cellsInfo"][$i][$j]["raw"].


САЙТОСТРОЙ.РУ - практикум создания сайтов для каждого

Просим с уважением относиться к авторам сайта и при копировании документов указывать ссылки на наш сайт.