Я преобразовываю данные массива в Excel с помощью PHPExcel. Когда файл Excel создается, данные хранятся в строке, но я хочу хранить столбцы данных. Мой массив приведен ниже:
array (size=3)
0 => string '8801755568952' (length=13)
1 => string '8801755556987' (length=13)
2 => string '8801755587985' (length=13)
Мой массив в код преобразования Excel:
$objPHPExcel->getActiveSheet()->fromArray($csv_data, null, 'A1')
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
return $objWriter->save($xls_output_path);
Мой выход:
8801755568952 8801755556987 8801755587985
Мой желаемый результат:
8801755568952
8801755556987
8801755587985
Если вы передадите простой одномерный массив fromArray()
, PHPExcel предполагает, что это одна строка, что вы видите.
Либо преобразуйте массив в двумерный массив
Поскольку PHPExcel будет рассматривать эти значения как числовые, и они превышают предел для 32-разрядного целого числа со знаком в PHP (и вы, вероятно, используете 32-битный PHP), они будут отлиты для float, я могу потерять точность, поэтому я бы не использовал этот подход сам.
Если вы хотите преобразовать массив в двумерный массив, используйте:
$csv_data = call_user_func_array(
'array_map',
array_merge(array(NULL), [$csv_data])
);
Или просто перебирайте его, записывая каждую строку по отдельности
$row = 1;
foreach($csv_data as $cellData) {
$objPHPExcel->getActiveSheet()->setCellValueExplicit('A'.$row++, $cellData);
}
Использование setCellValueExplicit()
приведет к тому, что значения будут обрабатываться как строка, поэтому ничто не будет отлито для float, поэтому потеря точности