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


422

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

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

1

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

3

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

6
1
По умолчанию при выводе поля с типом text_format Друпал отображает справочную информацию об ограничения того или иного текстового формата. Но не всегда данная информация нужна для конечного пользователя. Приведу способ, которым можно скрыть её вывод. Вариант через css мы не рассматриваем.
1