2015-12-19 124 views
0

我想用PHPExcel將數據導出爲.xls格式。這是我正在使用的代碼Excel導出使用PHPExcel插入?字符

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

什麼是你的數據庫表中的字符集?什麼字符串連接到數據庫?你需要確保你在單元格中設置的數據是utf-8? –

回答

0

看來你的問題與字符編碼有關。嘗試添加此標頭:

header('Content-Type: text/html; charset=UTF-8'); 

它會強制char編碼;你的輸出似乎是16位編碼(如unicode或utf16),使用兩個字節(char),第一個填充'?'

地址:

$query = $this->db->query("SET CHARACTER SET utf8"); 

將迫使字符編碼在SQL查詢輸出

+0

沒有傢伙得到相同的迴應。 – Vivek

+0

嘗試在'SELECT'之前添加'$ query = $ this-> db-> query(「SET CHARACTER SET utf8」);';另一個測試可能是用另一個程序打開.xls,如Libreoffice或Openoffice – gengisdave

+0

仍然會得到相同的響應。 – Vivek