We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 4036
    • 239 Posts
    Здравствуйте!
    Подскажите пожалуйста, как красиво решить такую ситуацию - есть большой excel’ский файл с прайсом.
    Жуть как не хочется ручками делать из него таблицу.
    Как это можно автоматизировать или хотя бы полуавтоматизтровать?

    Помогите советом, очень меня этим выручите! smiley
      Портфолио - http://wowstudio.pro
      • 1611
      • 591 Posts
      Вот и у меня похожая задача стоит. Не знаю как решить. Похоже придется городить что-то свое.

      Кстати на хабре, недавно была серия статей по вытаскиванию текста из данных программ Microsoft Office. http://habrahabr.ru/blogs/php/76033/ начать можно с этой ссылки
        • 28814 ☆ A M B ☆
        • 1,086 Posts
        Сложный вариант: попробуйте сохранить файл в CSV формате, далее используйте какой-нибудь парсер на PHP, который будет читать CSV файл и строить из него ту же таблицу. CSV парсеров на PHP огромное количество готовых, гугль Вам в помощь smiley
        Простой вариант: скопируйте всю таблицу из Excel в Dreamweaver в режиме графического редактирования, затем переключитесь в режим редактирования кода и скопируйте получившийся код. Правда, здесь бывают некоторые сложности из-за мусора, который часто копируется из MS Office вместе с текстом. Так что будьте внимательны, может придется еще полученный код подчищать.
          Разработка сайтов и программных модулей на MODX.
          Опыт работы на MODx с 2005 года. Высокое качество.
          Компания Baltic Design Colors: http://www.bdcolors.ru.
          • 785
          • 2,113 Posts
          Тут есть два варианта:
          1. Требуется создать на основе данных таблицу в базе MySQL, которая потом используется в разных местах на сайте.
          2. Надо просто на конкретную страницу добавить таблицу на основе данных таблицы Excel.

          В первом случае нужен парсер, но это в принципе просто, и потом с данными можно делать что угодно (программно).
          Во втором случае проще всего поступить так: скопировать таблицу Excel в буфер обмена, вставить ее в Word с использованием форматирования конечного документа, скопировать полученную таблицу Word опять в буфер обмена, вставить в MODx данные из Word. Если использовать нормальные версии всего, в том числе последнюю версию TinyMCE 3.2.7 то потом можно ничего не удалять, ну или удалить всего пару слов (скопировав полученный HTML-код в любой редактор и выбрав «заменить все»).
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 32163
            • 33 Posts

            Я столкнулся с подобной ситуацией прошедшим летом. Поскольку времени на поиск решения у меня не было, пришлось что-то придумывать. Был найден класс PHP Excel Reader и на его основе написан, возможно и кривой, но вполне рабочий и годящийся для моих нужд, сниппет. Сразу скажу - работает он только с одной страницей экселевского документа без изображений. Содержимое документа выводится на страницу в виде таблицы.

            Исходный код сниппета Pricelist:
            <?php
            $path = (isset($path))? $path :"";
            $conf = (isset($conf))? $conf : "default";
            require_once "assets/snippets/pricelist/config/".$conf.".conf.php";
            $data = new Spreadsheet_Excel_Reader("$path");
            $encoding = (isset($encoding))? $encoding : "utf-8";
            $data->setOutputEncoding("$encoding");
            echo $data->dump(true,true);
            ?>
            


            Сниппет имеет три возможных параметра:
            &path - путь к документу Excel.
            &conf - конфигурация для вывода документа на страницу. Начинал копаться с этим параметром, но не было времени. Так что "default" по умолчанию. Были еще два варианта, они в прилагающемся архиве. Если кто-то возьмется, будет здорово.
            &encoding - кодировка документа. UTF-8 по умолчанию.

            Пример вызова на странице:

            [!Pricelist? &path=`assets/files/example.xls` &encoding=`utf-8`!]

            Прилагающиеся файлы прилагаются - http://narod.ru/disk/15320197000/pricelist_snippet.zip.html

            P.S. Буду благодарен, если у уважаемых коллег по сообществу возникнут комментарии, касающиеся оптимизации (наличия ошибок в...) данного сниппета. Программистом я не являюсь и опыт работы с PHP у меня, мягко скажем, довольно посредственный, а сниппет, возможно, пригодится не мне одному.
              • 785
              • 2,113 Posts
              Quote from: WebraumZ at Nov 23, 2009, 12:39 PM

              Буду благодарен, если у уважаемых коллег по сообществу возникнут комментарии, касающиеся оптимизации (наличия ошибок в...) данного сниппета.
              Какое-то сомнительное решение – копировать полностью файл, внося небольшие исправления. Но конкретно сказать нечего, если работает, то и ладно. Но по-хорошему, как мне кажется, надо реализовывать иначе.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
                • 32163
                • 33 Posts
                Akots, я согласен - решение действительно сомнительное, но, как вы упомянули, вполне рабочее. Писался сниппет быстро, времени на раздумья было всего несколько часов. Если не сложно, могли бы посоветовать, в каком направлении двигаться?
                  • 785
                  • 2,113 Posts
                  Quote from: WebraumZ at Nov 23, 2009, 03:22 PM

                  Если не сложно, могли бы посоветовать, в каком направлении двигаться?
                  Двигаться в том направлении, чтобы excel_reader2.php включался без каких-либо изменений. А то при выходе новой версии нормальное обновление не получится. А что делать конкретно – это надо глубже разбираться… Но вообще-то можно и никуда не двигаться, если все работает.
                    Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                    Статьи о MODx, регулярно новые публикации
                    • 6862
                    • 97 Posts
                    Как сказал Akots тут всего два варианта.
                    Я предпочитаю первый, потому как прайсы переодически требуется обновлять, а через базу это проще и быстрее. Вот пример как это реализовано у меня:

                    Прайс:
                    Наименование Цена
                    Позиция1 цена1
                    Позиция2 цена2
                    Позиция3 цена3
                    ....
                    Открываю прайс в экселе и сохраняю - Сохранить как - другие форматы - тип CSV(MS-DOS).
                    Получаю прайс в формате CSV.

                    В базе данных делаю таблицу
                    CREATE TABLE IF NOT EXISTS `modx_pricelist` (
                      `id` int(10) NOT NULL AUTO_INCREMENT,
                      `name` varchar(50) NOT NULL DEFAULT '',
                      `price` varchar(10) NOT NULL DEFAULT '',
                      PRIMARY KEY (`id`)
                    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
                    

                    И при помощи phpMyAdmin импртирую данные в базу.

                    На сайте вывожу при помощи подобного сниппета:
                    <?php
                    $output .= '<table>';
                    $sql_select="SELECT * FROM modx_pricelist order by id";
                    $result = $modx->db->query($sql_select);
                    while($row = mysql_fetch_array($result)) {
                    	$output .= '<tr><td>'.$row[1].'</td><td>'.$row[2].'</td></tr>';
                    }
                    $output .= '</table>';
                    return $output;
                    ?>
                    


                    Таким образом обновление прайса на сайте занимает пару минут, - сохранить файл в CSV и импортировать его в phpMyAdmin.
                      • 4036
                      • 239 Posts
                      Quote from: De at Dec 01, 2009, 03:23 AM

                      Как сказал Akots тут всего два варианта.
                      Я предпочитаю первый, потому как прайсы переодически требуется обновлять, а через базу это проще и быстрее. Вот пример как это реализовано у меня:

                      Прайс:
                      Наименование Цена
                      Позиция1 цена1
                      Позиция2 цена2
                      Позиция3 цена3
                      ....
                      Открываю прайс в экселе и сохраняю - Сохранить как - другие форматы - тип CSV(MS-DOS).
                      Получаю прайс в формате CSV.

                      В базе данных делаю таблицу
                      CREATE TABLE IF NOT EXISTS `modx_pricelist` (
                        `id` int(10) NOT NULL AUTO_INCREMENT,
                        `name` varchar(50) NOT NULL DEFAULT '',
                        `price` varchar(10) NOT NULL DEFAULT '',
                        PRIMARY KEY (`id`)
                      ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
                      

                      И при помощи phpMyAdmin импртирую данные в базу.

                      На сайте вывожу при помощи подобного сниппета:
                      <?php
                      $output .= '<table>';
                      $sql_select="SELECT * FROM modx_pricelist order by id";
                      $result = $modx->db->query($sql_select);
                      while($row = mysql_fetch_array($result)) {
                      	$output .= '<tr><td>'.$row[1].'</td><td>'.$row[2].'</td></tr>';
                      }
                      $output .= '</table>';
                      return $output;
                      ?>
                      


                      Таким образом обновление прайса на сайте занимает пару минут, - сохранить файл в CSV и импортировать его в phpMyAdmin.


                      Спасибо ОГРОМНОЕ!
                      Вы дали хороший практический пример! smiley
                        Портфолио - http://wowstudio.pro