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
这样就可以了。