国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php excel 導出亂碼問題

2020-03-22 18:42:55
字體:
供稿:網(wǎng)友
/**     * 用于生成excel文件的函數(shù)     * author:walker     * @param $data 生成excel的數(shù)據(jù)(二維數(shù)組形式)     * @param null $savefile 生成excel的文件名(保不指定,則為當前時間戳)     * @param null $title 生成excel的表頭(一維數(shù)組形式)     * @param string $sheetname 生成excel的sheet名稱(缺省為sheet1)     */    function exportExcel($data,$savefile=null,$title=null,$sheetname='sheet1'){        //若沒有指定文件名則為當前時間戳        if(is_null($savefile)){            $savefile=time();        }        //若指字了excel表頭,則把表單追加到正文內(nèi)容前面去        if(is_array($title)){            array_unshift($data,$title);        }        import('Org.Util.PHPExcel');import('Org.Util.PHPExcel.IOFactory');        import('PHPExcel.Util.PHPExcel.Reader.Excel5');        $objPHPExcel = new /PHPExcel();        //Excel內(nèi)容        foreach($data as $k => $v){            $obj=$objPHPExcel->setActiveSheetIndex(0);            $row=$k+1;//行            $nn=0;            foreach($v as $vv){                $col=chr(65+$nn);//列                $vv = iconv("UTF-8", "GB2312//IGNORE",$vv);                $obj->setCellValue($col.$row,$vv);//列,行,值                $nn++;            }        }        $objPHPExcel->getActiveSheet()->setTitle($sheetname);        $objPHPExcel->setActiveSheetIndex(0);        header('Content-Type: application/vnd.ms-excel');        header('Content-Disposition: attachment;filename="'.$savefile.'.xls"');        header("Content-Type: application/vnd.ms-excel; charset=UTF-8");        header('Cache-Control: max-age=0');        $objWriter = /PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');        $objWriter->save('php://output');        exit;    }     /**     *     * 導出Excel     */    function expUser(){//導出Excel        $xlstitle  = array('id','商品編碼','模板編號','商品名稱','總庫存','當前庫存','供應(yīng)商');        $xlssql = M('erp_inventory');        $xlsData  = $xlssql->getField('id,p_code,mid,pname,banlance,cur_banlance,factory');//         show_bug($xlsData);die;       $this->exportExcel($xlsData,time(),$xlstitle);             }

以上是我代碼,我用thinkphp框架,第二張圖是導出后的效果,哪里出現(xiàn)的問題,怎么解決?

回復討論(解決方案)

注釋掉29行 $vv = iconv("UTF-8", "GB2312//IGNORE",$vv);

注釋掉29行 $vv = iconv("UTF-8", "GB2312//IGNORE",$vv);


一開始就沒有29行的,我后來加的,加不加 導出來的效果一樣哦!!

既然用的是 thinkphp,那么就應(yīng)該是 utf-8 的了
而 PHPExcel 的默認字符集也是 utf-8 的
那么為什么要
$vv = iconv("UTF-8", "GB2312//IGNORE",$vv);
將 utf-8 轉(zhuǎn)成 gb2312 呢?

貼出52行,$xlsData打印出來的部分代碼,是個二維數(shù)組,這里應(yīng)該沒有問題的。希望能給大神一點幫助

$vv = iconv("UTF-8", "GB2312//IGNORE",$vv);
$vv = iconv("UTF-8", "UTF-8//IGNORE",$vv);
$vv = iconv("GB2312", "UTF-8//IGNORE",$vv);
以上3種都試了,結(jié)果一樣啊!!

既然用的是 thinkphp,那么就應(yīng)該是 utf-8 的了
而 PHPExcel 的默認字符集也是 utf-8 的
那么為什么要
$vv = iconv("UTF-8", "GB2312//IGNORE",$vv);
將 utf-8 轉(zhuǎn)成 gb2312 呢?

看不懂?我沒說清楚嗎?看來你不能接受啟發(fā)式解答
把所有使用 iconv 轉(zhuǎn)碼的語句刪去!
這應(yīng)該明白了吧?
用 PHPExcel 寫到 excel 的必須是 utf-8 編碼的數(shù)據(jù)
這也應(yīng)該明白了吧?

轉(zhuǎn)為gbk看下,另iconv轉(zhuǎn)火星文和繁體字會有問題
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");

看不懂?我沒說清楚嗎?看來你不能接受啟發(fā)式解答
把所有使用 iconv 轉(zhuǎn)碼的語句刪去!
這應(yīng)該明白了吧?
用 PHPExcel 寫到 excel 的必須是 utf-8 編碼的數(shù)據(jù)
這也應(yīng)該明白了吧?

了解,29,38行 刪了 還是沒用呀,還要刪哪里?

轉(zhuǎn)為gbk看下,另iconv轉(zhuǎn)火星文和繁體字會有問題
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");

$vv =, 什么意思?

38不需要刪

還不行的話,就貼個截圖

轉(zhuǎn)為gbk看下,另iconv轉(zhuǎn)火星文和繁體字會有問題
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");

$vv =, 什么意思?
筆誤,$vv

轉(zhuǎn)為gbk看下,另iconv轉(zhuǎn)火星文和繁體字會有問題
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");

$vv =, 什么意思?
筆誤,$vv
過不了呢、

38不需要刪
還不行的話,就貼個截圖

38行補上了,難道是因為WPS的原因?公司用的WPS,家里用的html' target='_blank'>office2007,不過目前是亂碼了。怎么破

方法一:
setlocale(LC_ALL, 'zh_CN');
方法二:
$str = mb_convert_encoding($str, "UTF-8", "GBK"); //已知源碼為GBK,轉(zhuǎn)換為utf-8
可以參見博客。雖然我導的是csv文件,但是我想道理應(yīng)該是一樣的。
http://blog.csdn.net/phpfenghuo/article/details/17483261

方法一:
setlocale(LC_ALL, 'zh_CN');
方法二:
$str = mb_convert_encoding($str, "UTF-8", "GBK"); //已知源碼為GBK,轉(zhuǎn)換為utf-8
可以參見博客。雖然我導的是csv文件,但是我想道理應(yīng)該是一樣的。

方法一:LC_ALL 是什么東西
方法二:報錯
這兩句都放在那里啊?我放在28行后,代替$vv 不行呢、

不是很清楚 Untitled Spreadsheet、Unknown Creator 是如何來的
為什么是 $obj=$objPHPExcel->setActiveSheetIndex(0);
而不是 $obj = $objPHPExcel->getActiveSheet();

剛才單獨測試了一下,你的首發(fā)代碼應(yīng)該是沒有問題的,當然是沒有 iconv 的
問題在于文檔中出現(xiàn)的 Untitled Spreadsheet、Unknown Creator 是如何產(chǎn)生的

不是很清楚 Untitled Spreadsheet、Unknown Creator 是如何來的
為什么是 $obj=$objPHPExcel->setActiveSheetIndex(0);
而不是 $obj = $objPHPExcel->getActiveSheet();

按照你說的,變成這樣了,Untitled Spreadsheet、Unknown Creator沒有了

轉(zhuǎn)為gbk看下,另iconv轉(zhuǎn)火星文和繁體字會有問題
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");

$vv =, 什么意思?
筆誤,$vv
過不了呢、
extension=php_mbstring.dll把這個擴展開了

轉(zhuǎn)為gbk看下,另iconv轉(zhuǎn)火星文和繁體字會有問題
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");

$vv =, 什么意思?
筆誤,$vv
過不了呢、
extension=php_mbstring.dll把這個擴展開了
php 的extension=php_mbstring.dll 開啟了,重啟apache,導出沒有報錯,但還是亂碼

你沒注意還是有錯誤信息嗎?
A4的Worksheet...Feuilles de calcul
原來的
$objPHPExcel->getActiveSheet()->setTitle($sheetname);
$objPHPExcel->setActiveSheetIndex(0);
并沒有錯!

不是很清楚 Untitled Spreadsheet、Unknown Creator 是如何來的
為什么是 $obj=$objPHPExcel->setActiveSheetIndex(0);
而不是 $obj = $objPHPExcel->getActiveSheet();

按照你說的,變成這樣了,Untitled Spreadsheet、Unknown Creator沒有了
剛看錯了,應(yīng)該是28行,還是亂碼。

你沒注意還是有錯誤信息嗎?
A4的Worksheet...Feuilles de calcul
原來的
$objPHPExcel->getActiveSheet()->setTitle($sheetname);
$objPHPExcel->setActiveSheetIndex(0);
并沒有錯!


那代碼又回來剛開始了,那個亂碼的excel 我可以在excel設(shè)置里面改編碼嗎?

對,有轉(zhuǎn)回去了

我前面說了,我單獨測試你的代碼段是沒有問題的。
所以問題可能出在別的地方:比如傳入的數(shù)據(jù)、從表中讀取的數(shù)據(jù)、甚至是你使用的phpexcel類

include 'Plugin/PHPExcel/Classes/PHPExcel.php';//        import('Org.Util.PHPExcel.IOFactory');//        import('PHPExcel.Util.PHPExcel.Reader.Excel5');$data = array(  array('中','文','c'),  array('a','b','c'),  array('a','b','c'),);$sheetname = '123';$savefile = time();        $objPHPExcel = new PHPExcel();        //Excel內(nèi)容        foreach($data as $k => $v){            $obj=$objPHPExcel->setActiveSheetIndex(0);            $row=$k+1;//行            $nn=0;            foreach($v as $vv){                $col=chr(65+$nn);//列$vv = iconv('gbk', 'utf-8', $vv);                $obj->setCellValue($col.$row,$vv);//列,行,值                $nn++;            }        }        $objPHPExcel->getActiveSheet()->setTitle($sheetname);        $objPHPExcel->setActiveSheetIndex(0);        header('Content-Type: application/vnd.ms-excel');        header('Content-Disposition: attachment;filename="'.$savefile.'.xls"');        header("Content-Type: application/vnd.ms-excel; charset=UTF-8");        header('Cache-Control: max-age=0');        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');        $objWriter->save('php://output');

對,有轉(zhuǎn)回去了

我前面說了,我單獨測試你的代碼段是沒有問題的。
所以問題可能出在別的地方:比如傳入的數(shù)據(jù)、從表中讀取的數(shù)據(jù)、甚至是你使用的phpexcel類

include 'Plugin/PHPExcel/Classes/PHPExcel.php';//        import('Org.Util.PHPExcel.IOFactory');//        import('PHPExcel.Util.PHPExcel.Reader.Excel5');$data = array(  array('中','文','c'),  array('a','b','c'),  array('a','b','c'),);$sheetname = '123';$savefile = time();        $objPHPExcel = new PHPExcel();        //Excel內(nèi)容        foreach($data as $k => $v){            $obj=$objPHPExcel->setActiveSheetIndex(0);            $row=$k+1;//行            $nn=0;            foreach($v as $vv){                $col=chr(65+$nn);//列$vv = iconv('gbk', 'utf-8', $vv);                $obj->setCellValue($col.$row,$vv);//列,行,值                $nn++;            }        }        $objPHPExcel->getActiveSheet()->setTitle($sheetname);        $objPHPExcel->setActiveSheetIndex(0);        header('Content-Type: application/vnd.ms-excel');        header('Content-Disposition: attachment;filename="'.$savefile.'.xls"');        header("Content-Type: application/vnd.ms-excel; charset=UTF-8");        header('Cache-Control: max-age=0');        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');        $objWriter->save('php://output');

源數(shù)據(jù),和獲取的都沒問題,excel類是網(wǎng)址下的,我項目excel導入還用這個這個包啊,應(yīng)該沒問題的。

轉(zhuǎn)為gbk看下,另iconv轉(zhuǎn)火星文和繁體字會有問題
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");

$vv =, 什么意思?
筆誤,$vv
過不了呢、
extension=php_mbstring.dll把這個擴展開了
php 的extension=php_mbstring.dll 開啟了,重啟apache,導出沒有報錯,但還是亂碼
header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); 注釋掉這句看看

對,有轉(zhuǎn)回去了
我前面說了,我單獨測試你的代碼段是沒有問題的。
所以問題可能出在別的地方:比如傳入的數(shù)據(jù)、從表中讀取的數(shù)據(jù)、甚至是你使用的phpexcel類

include 'Plugin/PHPExcel/Classes/PHPExcel.php';//        import('Org.Util.PHPExcel.IOFactory');//        import('PHPExcel.Util.PHPExcel.Reader.Excel5');$data = array(  array('中','文','c'),  array('a','b','c'),  array('a','b','c'),);$sheetname = '123';$savefile = time();        $objPHPExcel = new PHPExcel();        //Excel內(nèi)容        foreach($data as $k => $v){            $obj=$objPHPExcel->setActiveSheetIndex(0);            $row=$k+1;//行            $nn=0;            foreach($v as $vv){                $col=chr(65+$nn);//列$vv = iconv('gbk', 'utf-8', $vv);                $obj->setCellValue($col.$row,$vv);//列,行,值                $nn++;            }        }        $objPHPExcel->getActiveSheet()->setTitle($sheetname);        $objPHPExcel->setActiveSheetIndex(0);        header('Content-Type: application/vnd.ms-excel');        header('Content-Disposition: attachment;filename="'.$savefile.'.xls"');        header("Content-Type: application/vnd.ms-excel; charset=UTF-8");        header('Cache-Control: max-age=0');        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');        $objWriter->save('php://output');

我弄了一組測試數(shù)據(jù),導出還是亂碼啊?你不是測試沒有問題嗎?

好吧,我導出來了,exportexcel重寫了,還是這個方法寫的有問題,還是謝謝你們啊。

從圖中可看到第5、11行都有錯誤信息
你可把標題去掉,只保留數(shù)據(jù)體,進行測試
exportExcel 中把這句也注釋掉
$objPHPExcel->getActiveSheet()->setTitle($sheetname);

從圖中可看到第5、11行都有錯誤信息

你可把標題去掉,只保留數(shù)據(jù)體,進行測試
exportExcel 中把這句也注釋掉
$objPHPExcel->getActiveSheet()->setTitle($sheetname);

還是不行哦

function exportexcel($data=array(),$title=array(),$filename='report'){    header("Content-type:application/octet-stream");    header("Accept-Ranges:bytes");    header("Content-type:application/vnd.ms-excel");      header("Content-Disposition:attachment;filename=".$filename.".xls");    header("Pragma: no-cache");    header("Expires: 0");    //導出xls 開始    if (!empty($title)){        foreach ($title as $k => $v) {            $title[$k]=iconv("UTF-8", "GB2312",$v);        }        $title= implode("/t", $title);        echo "$title/n";    }    if (!empty($data)){        foreach($data as $key=>$val){            foreach ($val as $ck => $cv) {                $data[$key][$ck]=iconv("UTF-8", "GB2312", $cv);            }            $data[$key]=implode("/t", $data[$key]);                    }       echo implode("/n",$data);    } }

我用上面的方法導出來沒問題,問題結(jié)果是每組數(shù)據(jù)都在每行excel表格A格中,沒有按列排開。能不能幫我改改

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大港区| 泰安市| 永和县| 都昌县| 泌阳县| 越西县| 德清县| 富阳市| 阿坝| 健康| 正安县| 惠水县| 宁夏| 旬邑县| 札达县| 龙里县| 奉贤区| 涿州市| 沾化县| 诸城市| 昌平区| 嘉禾县| 康平县| 浪卡子县| 苍南县| 盐亭县| 金塔县| 辽中县| 静海县| 台湾省| 凉城县| 德清县| 台东县| 绥德县| 抚州市| 建昌县| 沙坪坝区| 安达市| 铜梁县| 漯河市| 闵行区|