程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 基於php導出到Excel或CSV的詳解(附utf8、gbk 編碼轉換)

基於php導出到Excel或CSV的詳解(附utf8、gbk 編碼轉換)

編輯:關於PHP編程

    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,'老梁','**工作室','jb51.net','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,'老梁','**工作室','jb51.net','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]);
    ?>
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved