将数组数据转换为Excel

时间:2015-10-10 12:53:50

标签: php arrays excel

我正在使用PHPExcel将数组数据转换为Excel。创建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

1 个答案:

答案 0 :(得分:1)

如果您将一个简单的1维数组传递给fromArray()方法,那么PHPExcel会假定它是一行,这就是您所看到的。

将数组转换为二维数组

由于PHPExcel会将这些值视为数字,并且它们大于PHP中32位有符号整数的限制(并且您可能正在运行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,因此不会丢失精度