我正在尝试使用PHPExcel将数据导出为.xls
格式。这是我正在使用的代码
require_once "excel/PHPExcel/IOFactory.php";
$query = $this->db->query("SELECT oc_product.product_id,oc_product.model,oc_product.price,oc_product_description.name FROM oc_product LEFT JOIN oc_product_description ON oc_product_description.product_id=oc_product.product_id");
$product_data = $query->rows;
$objTpl = PHPExcel_IOFactory::load("excel/template.xls");
$objTpl->setActiveSheetIndex(0);
$i=3;
foreach ($product_data as $prod)
{
$objTpl->getActiveSheet()->setCellValue('A'.$i, $prod['product_id']);
$objTpl->getActiveSheet()->setCellValue('B'.$i, $prod['name']);
$objTpl->getActiveSheet()->setCellValue('C'.$i, $prod['model']);
$objTpl->getActiveSheet()->setCellValue('D'.$i, $prod['price']);
$i++;
}
$objTpl->getActiveSheet()->getStyle('A')->getAlignment()->setWrapText(true);
$objTpl->getActiveSheet()->getColumnDimension('A')->setWidth(40);
$filename=mt_rand(1,100000).'.xls'; //just some random filename
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objTpl, 'Excel5');
$objWriter->save('php://output');
exit;
文件下载得很好但是当我打开文件时它会显示'?'在这样的每一个字母之后“?D?O?U?B?L?E??F?A?C?E?S?H?E?E?T?S???”。
答案 0 :(得分:0)
看来你的问题与字符编码有关。尝试添加此标题:
header('Content-Type: text/html; charset=UTF-8');
它将强制char编码;您的输出似乎是一个16位编码(如unicode或utf16),使用两个字节(char),第一个填充了'?'
ADD:
$query = $this->db->query("SET CHARACTER SET utf8");
将强制SQL查询输出中的char编码