При использовании модуля 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
);
- 11.04.2023
- 197 просмотров