基于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
详解:――如何将图片储存在数据库里
Dec 05 PHP
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
PHP的开发框架的现状和展望
Mar 16 PHP
php MySQL与分页效率
Jun 04 PHP
php删除数组元素示例分享
Feb 17 PHP
php表单敏感字符过滤类
Dec 08 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
php和nginx交互实例讲解
Sep 24 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
PHP安装问题
2006/10/09 PHP
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
为你总结一些php信息函数
2015/10/21 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
用JS写的一个Ajax库(实例代码)
2016/08/06 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
Python制作简单的网页爬虫
2015/11/22 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
python把一个字符串切开的实例方法
2020/09/27 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
迪奥官网:Dior.com
2018/12/04 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
三月学雷锋月活动总结
2014/04/28 职场文书
学生手册评语
2014/05/05 职场文书
会计系毕业生求职信
2014/05/28 职场文书
市场策划求职信
2014/08/07 职场文书
病人慰问信范文
2015/02/15 职场文书