基于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执行速度全攻略(下)
Oct 09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Jan 27 PHP
记录PHP错误日志 display_errors与log_errors的区别
Oct 09 PHP
PHP中计算字符串相似度的函数代码
Dec 29 PHP
php获取百度收录、百度热词及百度快照的方法
Apr 02 PHP
隐性调用php程序的方法
Jun 13 PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 PHP
标准版Eclipse搭建PHP环境的详细步骤
Nov 18 PHP
php中二分法查找算法实例分析
Sep 22 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
Feb 17 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
php定期拉取数据对比方法实例
Sep 22 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
Laravel框架路由管理简单示例
2019/05/07 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
Python中逗号的三种作用实例分析
2015/06/08 Python
Python模拟登陆实现代码
2017/06/14 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
python 杀死自身进程的实现方法
2019/07/01 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
关于python3中setup.py小概念解析
2019/08/22 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python全栈开发语法总结
2020/11/22 Python
花卉与景观设计系大学生求职信
2013/10/01 职场文书
境外导游求职信
2014/02/27 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
企业文化口号
2014/06/12 职场文书
经典毕业生求职信
2014/07/12 职场文书
管理失职检讨书范文
2015/05/05 职场文书
党员理论学习心得体会
2016/01/21 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python