PhpExcel - строго указать тип ячейки при экспорте данных


197

При использовании модуля PHPExcel для экспорта данных из Друпал может возникнуть необходимость строго указать тип ячейки. Иначе excel автоматически пытается преобразовать текст в строку. Не помогает даже использование готового шаблона с предварительно сохраненными типами ячеек.

Предлагаю вариант решения данной проблемы. Предположим, что мы точно знаем, какие номера колонок должны быть заполнены как текст. Будем использовать hook_phpexcel_export

function MYMODULE_phpexcel_export($op, &$data, $phpexcel, $options, $column = NULL, $row = NULL) {
  switch ($op) {
    case 'post cell':
      if(isset($options['col_types']['string']) && is_array($options['col_types']['string'])){
        if(in_array($column, $options['col_types']['string'])){
          $phpexcel->getCellByColumnAndRow($column, $row)->setValueExplicit($data, PHPExcel_Cell_DataType::TYPE_STRING);
        }
      }
      break;
  }
}

Массив $options используется для передачи настроек в функцию phpexcel_export. Он передается в hook_phpexcel_export без изменений. Это дает нам возможность придумывать свои настройки и потом их обрабатывать. Мы передаем параметр col_types - массив с типами ячеек и номерами колонок

Вариант использования

Приведу пример из реальной практики:

//Тестовая строка для экспорта
$rows[] = [
'1', 
'1820.003400', 
1, 
'Соединитель направляющих шин для ПД1255П14\1675П14 ELITECH',
'ELITECH', 
'1820.003400',
];

//Указываем, что в колонке 1 (нумерация с 0) - будет текст
$options['col_types']['string'] = [1];

$fname = 'export.xls';
$uri = 'temporary://' . $fname;
$path = drupal_realpath($uri);

module_load_include('inc', 'phpexcel');

phpexcel_export(
    NULL,
    array($rows),
    $path,
    $options
  );

Результат можно увидеть на скриншоте. Специально выводим две одинаковые колонки (1 и 5), что бы заметить разницу

Drupal Drupal 7 — Статьи проExcelphpExcel
Добавить комментарий
Может быть интересно

Данный скрипт поможет пересохранить файлы Excel в csv. Может быть полезно перед отправкой прайсов на хостинг для дальнейшей обработки

5

Несколько способов как в twig объединить несколько строк в одну

3
Снова возвращаемся к migrate. Довольно удобный фреймворк для импорта данных в Друпал. Один из распространенных форматов источника для импорта - CSV. Поддерживается migrate из коробки. Описание и примеры работы с классом MigrateSourceCSV можно найти на drupal.org.
2

Иногда необходимо вывести в одном документе не только символы стандартной латиницы и своего национального алфавита. Например, для того, чтобы сослаться на название немецкого, французского или чешского источника, либо привести цитату на греческом языке (кстати, огромное множество символов просто отсутствует на клавиатуре).

1
Иногда при разработке сайта появляется необходимость создавать отдельный шаблон для определенной ноды. По умолчанию такой возможности нет, зато можно это прикрутить самостоятельно. Как это сделать? Это можно узнать в данной статье.