Немного погуглив вы скорее всего обнаружите
PHPExcel – отличный класс для манипуляций с данными формата Excel.
Можно использовать просто подключив как класс к вашему проекту, а можно воспользоваться трудом коллег и подключить как модуль: Модуль PHPExcel для kohanaframework

На момент написания поста – при загрузке с  github данного модуля папка vendor/PHPExcel – оказалась пуста, просто ложим туда содержимое самого класса PHPExcel.

Использование модуля достаточно простое и описано в Readme.

Кратко продублирую

чтение данных из файла spreadsheet.xlsx, находящегося в корне нашего сайта:

$spreadsheet = Spreadsheet::factory(
          array(
                    'filename' => 'spreadsheet.xlsx'
          ), FALSE)
          ->load()
          ->read();
foreach ($spreadsheet as $v)
{
          echo $v['A'].',';
// где $v['A'] - данные из ячейки A страницы Excel
}

запись данных в файл Excel (в модуле обнаружены ошибки, ждем правок, для создания файлов пока можно использовать модуль https://github.com/rafsoaken/kohana-phpexcel):

$spreadsheet = Spreadsheet::factory(array(
      'author'  => 'Kohana-app',
      'title'      => 'Отчет',
      'subject' => 'Тема',
      'description'  => 'Описание',
      'path' => '/',
      'name' => 'report'
));
$spreadsheet->set_active_worksheet(0);
$as = $spreadsheet->get_active_worksheet();
$as->setTitle('Потребители');
$as->getDefaultStyle()->getFont()->setSize(9);

$as->getStyle('A1:G1')->applyFromArray(Kohana::$config->load('styles.header'));
$as->getRowDimension(1)->setRowHeight(24);
$as->getStyle('A1:G1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$as->getStyle('A1:G1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

$as->getColumnDimension('A')->setWidth(8);
$as->getColumnDimension('B')->setWidth(12);
$as->getColumnDimension('C')->setWidth(46);
$as->getColumnDimension('D')->setWidth(36);

$sh = array(
    1 => array('День','Пользователь','Количество','Цена'),
    2 => array(1, 'Женя', 5, 587),
    3 => array(2, 'Денис', 3, 981),
    4 => array(3, 'Анна', 1, 214)
);

$spreadsheet->set_data($sh, false);
$spreadsheet->send();

Для тех кому лень качать из разных источников вот ссылки на укомплектованный модуль для соответствующих версий:
phpexcel_kohana3.2

phpexcel_kohana3.3

7 thoughts on “Работаем с Excel файлами в Kohana 3.3

  1. Все делал по инструкции – вылезает такая какашка

    ErrorException [ Fatal Error ]: Call to undefined method PHPExcel::set_active_sheet()

    Библиотека PHPExcel 1.7.9 и Kohana 3.3.

    В чем может быть проблема?

    Reply
    • Этот пункт не пропустили: “На момент написания поста – при загрузке с github данного модуля папка vendor/PHPExcel – оказалась пуста, просто ложим туда содержимое самого класса PHPExcel.”?
      Т.е. вам необходимо скачать класс PHPExcel и распаковать.
      выложил скомплектованный модуль у себя, ссылка в посте.

      Reply
  2. Спасибо что откликнулись.

    Делаю все как в вашем примере… Но: у вас ошибка №1:

    строки
    $spreadsheet->set_active_sheet(0);
    $as = $spreadsheet->get_active_sheet();

    Меняем на:

    $spreadsheet->set_active_worksheet(0);
    $as = $spreadsheet->get_active_worksheet();

    А ошибка 2 возникает при работе вашего примера и заключается в следующем:

    rrorException [ Warning ]: mb_strlen() expects parameter 1 to be string, array given
    MODPATH/phpexcel/vendor/PHPExcel/Classes/PHPExcel/Shared/String.php [ 553 ]
    548 * @return int Character count
    549 */
    550 public static function CountCharacters($value, $enc = ‘UTF-8’)
    551 {
    552 if (self::getIsMbstringEnabled()) {
    553 return mb_strlen($value, $enc);
    554 }
    555
    556 if (self::getIsIconvEnabled()) {
    557 return iconv_strlen($value, $enc);
    558 }

    Не пойму в чем дело если честно.

    Люди говорят, что у них все работает.

    Reply

Leave a reply

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

required