phpexcel編碼
A. 如何使用php導出csv和excel文件
(一)phpexcel文件導出:
步驟1,引入文件require APPPATH.'/libraries/PHPExcel.PHP';
步驟2, 實例化PHPEXCEL對象 $objPHPExcel=new PHPExcel();
步驟3, 設置表頭 $column = array('A','B','C'); $line = array('詞語','頻次','詞性');
//填充表頭信息
for($i = 0;$i < count($tableheader_all);$i++) {
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
//上一行中"$letter[$i]1"表示第「1」行第「$i」列
}
步驟4, 填充數據
for ($i = 2;$i <= count($data) + 1;$i++) {//因為內容是從第二行開始的,所以i=2表示從第二行開始填充數據
$j = 0;
foreach ($tmp as $key=>$val ){
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$j]$i",$data[$i-2][$val]); //數據是從第一條開始但是i的初值是2所以想從第一條開始應該是$data[$i-2]開始
$j++;
}
}
步驟5,寫進excel中並輸出
$write = new PHPExcel_Writer_Excel5($objPHPExcel);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");;
header('Content-Disposition:attachment;filename="數據導出_詞雲圖.xls"');
header("Content-Transfer-Encoding:binary");
$write->save('php://output');
(一)CSV文件導出:
csv文件導出最令人頭疼的問題就是編碼問題,現在分享一下我的經驗
首先看伺服器是linux的還是windows的 如果是windows的伺服器那麼編碼問題只能藉助於mb_convert_encoding()或者是iconv兩個函數相互轉換中文編碼
如果伺服器是linux的 那麼很簡單 utf-8: setlocale(LC_ALL, 『en_US.UTF-8′); 簡體中文:setlocale(LC_ALL, 『zh_CN');
下面來說csv導出步驟:
$result = mysql_query("select * from student order by id asc");
$str = "姓名,性別,年齡\n";
$str = iconv('utf-8','gb2312',$str);
while($row=mysql_fetch_array($result)){
$name = iconv('utf-8','gb2312',$row['name']); //中文轉碼
$sex = iconv('utf-8','gb2312',$row['sex']);
$str .= $name.",".$sex.",".$row['age']."\n"; //用引文逗號分開
}
$filename = date('Ymd').'.csv'; //設置文件名
export_csv($filename,$str); //導出
要將數據導出到本地即下載,需要修改header信息,代碼如下:
function export_csv($filename,$data) {
header("Content-type:text/csv");
header("Content-Disposition:attachment;filename=".$filename);
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');
header('Pragma:public');
echo $data;
}
B. PhpExcel 當編碼為gbk時,導不出來中文嗎,如果不轉成utf8的中文就是空白,這是什麼原因
你復制到txt中,再復制回來試試吧
C. phpexcel 批量導出多個excle文件
<?
//設置PHPExcel類庫的include path
set_include_path(『.』. PATH_SEPARATOR .』D:/workspace/biznaligy_eh/dev_src/includes/PHPExcel』 . PATH_SEPARATOR . get_include_path());
/**
* 以下是使用示例,對於以 //// 開頭的行是不同的可選方式,請根據實際需要
* 打開對應行的注釋。
* 如果使用 Excel5 ,輸出的內容應該是GBK編碼。
*/
require_once 『PHPExcel.php』;
require_once 『PHPExcel/Writer/Excel5.php』; // 用於其他低版本xls
require_once 『PHPExcel/Writer/Excel2007.php』; // 用於 excel-2007 格式
// 創建一個處理對象實例
$objExcel = new PHPExcel();
// 創建文件格式寫入對象實例, uncomment
$objWriter = new PHPExcel_Writer_Excel5($objExcel); // 用於其他版本格式
//or
//$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用於 2007 格式
//$objWriter->setOffice2003Compatibility(true);
//設置文檔基本屬性
$objProps = $objExcel->getProperties();
$objProps->setCreator(「Zeal Li」);這樣試試呢如果還有不明白的話,你也可以去後盾人平台看看php基礎教學視頻看看,也是不錯的選擇,希望能幫到你,給個採納吧謝謝( *✪㉨✪)✄╰ひ╯
D. 關於phpexcel讀取excel表的問題,如下
<?
$sheet_i = 2;//行
$sheet_j = 1;//列
for($currentRow = 2;$currentRow <= $allRow;$currentRow++){
/**從第A列開始輸出*/
for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){
$val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()將字元轉為十進制數*/
if($sheet_i = 2&&$sheet_j = 1)//自己算好輸出第幾行第幾列
{
if($currentColumn == 'A')
{
echo GetData($val)."\t";
}else{
//echo $val;
/**如果輸出漢字有亂碼,則需將輸出內容用iconv函數進行編碼轉換,如下將gb2312編碼轉為utf-8編碼輸出*/
echo iconv('utf-8','gb2312', $val)."\t";
}
}
$sheet_j ++;
}
$sheet_i++;
$sheet_j = 0;//重置列數
echo "</br>";
}
echo "\n";
?>
E. phpexcel怎麼下載不了excel,數據全都顯示在頁面上了,還有好多亂碼
可能原因與解決辦法如下:
需要將輸出的內容用iconv()轉換成gbk,去網路上搜下iconv的用法。
從編碼方向上考慮,或者試試把字元集改稱gbk的,或者用iconv把所有內容都轉一遍,不要漏了。
可能是頭部沒有添加頭值。頭部需要加一個頭值:
Header("Content-type: application/octet-stream;charset=utf-8");
F. 用的PHPExcel 下載出現亂碼的問題
編碼問題,解決方法:
一、開頭加上一句:
header("Content-Type:text/html;charset=GB2312");
同時把你頁面中的「 $cellvalue=iconv("gbk","UTF-8",$content...」的utf-8也統一為GB2312試試!
二、也可改用下面辦法,不用$Excelobj=new PHPExcel();對象,而是直接輸出html格式(只是把擴展名改為.xsl),因為excel,word本身是很好的html編輯器,能直接解釋html標簽:
//如果是xsl,word等則更簡單,只需直接在原來的php文件開頭加上下面幾句:
<?php
header("Content-Type: application/force-download");//提示下載,而不是直接打開!
if( $sExport == "excel"){
header("ContentType = application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=".$oTitle.".xls");
}
if( $sExport == "word"){
echo ("<div align='center'><font size=+2>收文登記簿</font><hr size=3 align='center' width=360></div><br>");
header("ContentType = application/vnd.ms-word");//或試試 application/msword
header("Content-Disposition: attachment; filename=".$oTitle.".doc");
}
if( $sExport == "csv"){
header("ContentType = application/csv"); //圖像image/jpeg",或image/*"
header("Content-Disposition: attachment; filename=".$oTitle.".csv");
}
//.....輸出原來的php代碼
G. PHPExcel 錯誤,我是要用PHPExcel從資料庫里導出到Excel裡面,提示錯誤~!
$objPHPExcel->setActiveSheetIndex(0)
$rowb = $dsql->GetOne("Select sum(b.hongli) as hongli From `ek_member_incash` b");
$hongli=$rowb['hongli'];
->setCellValue('A4', $hongli)
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
這段代碼有問題。
正確的順序應該是
$rowb = $dsql->GetOne("Select sum(b.hongli) as hongli From `ek_member_incash` b");
$hongli=$rowb['hongli'];
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A4', $hongli)
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
這樣把 。
ps:在寫php代碼的時候 可以使用ide。這樣可以提交你的編碼速度,而且比較容易找到問題。
H. 我用PHPExcel,把數據輸出到excel並導出到本地,但每次都下載不到本地,出現一堆亂碼,希望大神解答一下
如果對格式沒有要求的話可以用file_put_contens;
如果一定要用excel的話,就把字元集編碼調整一下,最好是GBK之類的
I. 我用phpexcel 導出excel ,結果 單元格里漢字正常 標題漢字就不顯示了 我設置的utf8編碼
header('Content-Type:text/html;Charset=utf-8;');
require_once './lib/PHPExcel.php';
require_once './lib/PHPExcel/Writer/Excel5.php';
$con = mysql_connect("192.168.80.1","root","");
mysql_select_db("db");
mysql_query("set names 'utf8'");
$objExcel = new PHPExcel();
$objWriter = new PHPExcel_Writer_Excel5($objExcel);
=============================================
亂碼問題我也碰到了。 所以總結下。
1、 header是必須的,
2、讀資料庫不要用DB類,單獨寫歌比較好
3、用 PHPExcel_Writer_Excel5
這樣就可以了。