基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)


Posted in PHP onJune 25, 2013

php导入到excel乱码是因为utf8编码在xp系统不支持所有utf8编码转码一下就完美解决了
utf-8编码案例
Php代码

<?php 
header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); 
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/octet-stream"); 
header("Content-Type: application/download"); 
header("Content-Disposition: attachment;filename=11.xls "); 
header("Content-Transfer-Encoding: binary "); 
?> 

Php代码
<?    
$filename="php导入到excel-utf-8编码";    
$filename=iconv("utf-8", "gb2312", $filename);    
echo $filename;    
?>  

gbk编码案例
Php代码
<?php 
header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); 
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/octet-stream"); 
header("Content-Type: application/download"); 
header("Content-Disposition: attachment;filename=11.xls "); 
header("Content-Transfer-Encoding: binary "); 
?> 

Php代码
0.<?    
0.$filename="php导入到excel-utf-8编码";    
0.echo $filename;    
0.?>  

访问网站的时候就下载到excel里面
要弄单元格区别的话
用table表格做网页的就可以了
====================== 其他方法 =============================
1、制作简单 Excel
0.<?php   
0.header("Content-type:application/vnd.ms-excel");   
0.header("Content-Disposition:filename=php2excel.xls");   
0.  
0.echo "A1/t B1/t C1/n";   
0.echo "A2/t B2/t C2/n";   
0.echo "A3/t B3/t C3/n";   
0.echo "A4/t B4/t C4/n";   
0.?> 

2、制作简单 CSV 
<?php
$action =$_GET['action'];
if ($action=='make'){
 $fp = fopen("demo_csv.csv","a"); //打开csv文件,如果不存在则创建
 $title = array("First_Name","Last_Name","Contact_Email","Telephone"); //第一行数据
 $data_1 = array("42343","423432","4234","4234"); 
 $data_2 = array("4234","Last_Name","Contact_Email","Telephone"); 
 $title = implode(",",$title); //用 ' 分割成字符串
 $data_1 = implode(",",$data_1); // 用 ' 分割成字符串
 $data_2 = implode(",",$data_2); // 用 ' 分割成字符串
 $data_str =$title."/r/n".$data_1."/r/n".$data_2."/r/n"; //加入换行符
 fwrite($fp,$data_str); // 写入数据
 fclose($fp); //关闭文件句柄
 echo "生成成功";
}
echo "<br>";
echo "<a href='?action=make'>生成csv文件</a>";
?>

也可以做一个封闭函数:
封闭函数一:
function exportToCsv($csv_data, $filename = 'export.csv') {
    $csv_terminated = "/n";
    $csv_separator = ",";
    $csv_enclosed = '"';
    $csv_escaped = "//";
    // Gets the data from the database
    $schema_insert = '';
    $out = '';
    // Format the data
    foreach ($csv_data as $row)
    {
        $schema_insert = '';
        $fields_cnt = count($row);
        //printr($row);
        $tmp_str = '';
        foreach($row as $v)
        {
            $tmp_str .= $csv_enclosed.str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $v).$csv_enclosed.$csv_separator;
        } // end for        $tmp_str = substr($tmp_str, 0, -1);
        $schema_insert .= $tmp_str;
        $out .= $schema_insert;
        $out .= $csv_terminated;
    } // end while
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Length: " . strlen($out));
    header("Content-type: text/x-csv");
    header("Content-Disposition:filename=$filename");
    echo $out;
}
/*
$csv_data = array(array('Name', 'Address'));
array_push($csv_data, array($row['name'],$row['address']));
...
exportToCsv($csv_data,'new_file.csv');
*/

封闭函数二:
<?
/**
 * Simple class to properly output CSV data to clients. PHP 5 has a built
 * in method to do the same for writing to files (fputcsv()), but many times
 * going right to the client is beneficial.
 *
 * @author Jon Gales
 */
class CSV_Writer {
    public $data = array();
    public $deliminator;
    /**
     * Loads data and optionally a deliminator. Data is assumed to be an array
     * of associative arrays.
     *
     * @param array $data
     * @param string $deliminator
     */
    function __construct($data, $deliminator = ",")
    {
        if (!is_array($data))
        {
            throw new Exception('CSV_Writer only accepts data as arrays');
        }
        $this->data = $data;
        $this->deliminator = $deliminator;
    }
    private function wrap_with_quotes($data)
    {
        $data = preg_replace('/"(.+)"/', '""$1""', $data);
        return sprintf('"%s"', $data);
    }
    /**
     * Echos the escaped CSV file with chosen delimeter
     *
     * @return void
     */
    public function output()
    {
        foreach ($this->data as $row)
        {
            $quoted_data = array_map(array('CSV_Writer', 'wrap_with_quotes'), $row);
            echo sprintf("%s/n", implode($this->deliminator, $quoted_data));
        }
    }
    /**
     * Sets proper Content-Type header and attachment for the CSV outpu
     *
     * @param string $name
     * @return void
     */
    public function headers($name)
    {
        header('Content-Type: application/csv');
        header("Content-disposition: attachment; filename={$name}.csv");
    }
}
/*
//$data = array(array("one","two","three"), array(4,5,6));
$data[] = array("one","two","three");
$data[] = array(4,5,6);
$csv = new CSV_Writer($data);
$csv->headers('test');
$csv->output();
*/

3. 使用excel类
<?php
require_once 'Spreadsheet/Writer.php';
$workbook = new Spreadsheet_Excel_Writer();
/* 生成 CSV
$filename = date('YmdHis').'.csv';
$workbook->send($filename); // 发送 Excel 文件名供下载
*/
// 生成 Excel
$filename = date('YmdHis').'.xls';
$workbook->send($filename); // 发送 Excel 文件名供下载
$workbook->setVersion(8);
$workbook->setBIFF8InputEncoding('UTF-8');
$worksheet =& $workbook->addWorksheet("Sheet-1");
$data[]= array('id','username','company','email','mob','daytime','intent');
$data[] = array(1,'老梁','**工作室','3water.com','1363137966*',time(),'y');
$total_row = count($data);
$total_col = count($data[0]);
for ($row = 0; $row < $total_row; $row ++) {
   for ($col = 0; $col < $total_col; $col ++) {
  $worksheet->writeString($row, $col, $data[$row][$col]); // 在 sheet-1 中写入数据
   }
}
/*
$worksheet =& $workbook->addWorksheet("Sheet-2");
$data[]= array('id','username','company','email','mob','daytime','intent');
$data[] = array(1,'老梁','**工作室','3water.com','1363137966*',time(),'y');
$total_row = count($data);
$total_col = count($data[0]);
for ($row = 0; $row < $total_row; $row ++) {
   for ($col = 0; $col < $total_col; $col ++) {
  $worksheet->writeString($row, $col, $data[$row][$col]); // 在 sheet-2 中写入数据
   }
}
*/
$workbook->close(); // 完成下载
?>

类二
-----函数说明
读取Excel文件
function Read_Excel_File($ExcelFile,$Result)
$ExcelFile    Excel文件名
$Result        返回的结果
函数返回值    正常返回0,否则返回错误信息
返回的值数组
$result[sheet名][行][列] 的值为相应Excel Cell的值

建立Excel文件   
function Create_Excel_File($ExcelFile,$Data)
$ExcelFile    Excel文件名
$Data        Excel表格数据
请把函数写在PHP脚本的开头 
例1:

<?
require "excel_class.php";
Read_Excel_File("Book1.xls",$return);
for ($i=0;$i<count($return[Sheet1]);$i++)
{
    for ($j=0;$j<count($return[Sheet1][$i]);$j++)
    {
        echo $return[Sheet1][$i][$j]."|";
    }
    echo "<br>";
}
?>

例2:
<?
require "excel_class.php";
Read_Excel_File("Book1.xls",$return);
Create_Excel_File("ddd.xls",$return[Sheet1]);
?>

PHP 相关文章推荐
php $_ENV为空的原因分析
Jun 01 PHP
php Smarty模板生成html文档的方法
Apr 12 PHP
深入php define()函数以及defined()函数的用法详解
Jun 05 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
Sep 12 PHP
PHP内存使用情况如何获取
Oct 10 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
Jun 25 #PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 #PHP
使用php判断网页是否gzip压缩
Jun 25 #PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 #PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 #PHP
提升PHP性能的21种方法介绍
Jun 25 #PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
Jun 25 #PHP
You might like
VOLVO车载收音机
2021/03/02 无线电
PHP采集腾讯微博的实现代码
2012/01/19 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
js 幻灯片的实现
2011/12/06 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
js继承实现方法详解
2016/12/16 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
Python中的fileinput模块的简单实用示例
2015/07/09 Python
python通过文件头判断文件类型
2015/10/30 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
LINUX下线程,GDI类的解释
2016/12/14 面试题
大学生最常用的自我评价
2013/12/07 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
2014年检验科工作总结
2014/11/22 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
小人国观后感
2015/06/11 职场文书
如何书写邀请函?
2019/06/24 职场文书
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python