PHP-based export to Excel or CSV (with UTF8, GBK encoding conversion)

Source: Internet
Author: User
PHP Import into Excel garbled because UTF8 encoding in the XP system does not support all UTF8 encoding transcoding a perfect solution
Utf-8 Coding Case
PHP code






<?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 code



<?
$filename="php import to excel-utf-8 encoding";
$filename=iconv("utf-8", "gb2312", $filename);
echo $filename;
?>


GBK Coding Case
PHP code




<?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 code




0.<?
0.$filename="php import to excel-utf-8 encoding";
0.echo $filename;
0.?>


Download to Excel when you visit the website
To make the cell difference.
You can use a table table to make a Web page.
====================== Other methods =============================
1. Make Simple 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. Make a simple CSV



<?php
$action =$_GET['action'];
if ($action=='make'){
  $fp = fopen("demo_csv.csv","a"); //Open the csv file, if it does not exist, create it
  $title = array("First_Name","Last_Name","Contact_Email","Telephone"); //The first row of data
  $data_1 = array("42343","423432","4234","4234");
  $data_2 = array("4234","Last_Name","Contact_Email","Telephone");
  $title = implode(",",$title); //Use 'to split into strings
  $data_1 = implode(",",$data_1); // Use 'to split into strings
  $data_2 = implode(",",$data_2); // Use 'to split into strings
  $data_str =$title."/r/n".$data_1."/r/n".$data_2."/r/n"; //Add line break
  fwrite($fp,$data_str); // write data
  fclose($fp); //Close the file handle
  echo "Generate successfully";
}
echo "<br>";
echo "<a href='?action=make'>Generate csv file</a>";
?>


You can also do a closed function:
Closed function One:



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');
*/


Closed function Two:



<?
/**
 * 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. Use the Excel class


<?php
require_once'Spreadsheet/Writer.php';
$workbook = new Spreadsheet_Excel_Writer();
/* Generate CSV
$filename = date('YmdHis').'.csv';
$workbook->send($filename); // Send Excel file name for download
*/
// Generate Excel
$filename = date('YmdHis').'.xls';
$workbook->send($filename); // Send Excel file name for download
$workbook->setVersion(8);
$workbook->setBIFF8InputEncoding('UTF-8');
$worksheet =& $workbook->addWorksheet("Sheet-1");
$data[]= array('id','username','company','email','mob','daytime','intent');
$data[] = array(1,'Old Liang','**Studio','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]); // write data in sheet-1
   }
}
/*
$worksheet =& $workbook->addWorksheet("Sheet-2");
$data[]= array('id','username','company','email','mob','daytime','intent');
$data[] = array(1,'Old Liang','**Studio','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]); // write data in sheet-2
   }
}
*/
$workbook->close(); // complete download
?>


Class Two
-----function Description
Reading Excel files
function Read_excel_file ($ExcelFile, $Result)
$ExcelFile Excel file name
Results returned by $Result
function return value returns 0 normally, otherwise an error message is returned
Returns an array of values
$result [sheet name] [row] [column] value is the value of the corresponding Excel cell

Create an Excel file
function Create_excel_file ($ExcelFile, $Data)
$ExcelFile Excel file name
$Data Excel Tabular Data
Please write the function at the beginning of the PHP script
Example 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>";
}
?>


Example 2:




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

Alibaba Cloud Hot Products

Elastic Compute Service (ECS) Dedicated Host (DDH) ApsaraDB RDS for MySQL (RDS) ApsaraDB for PolarDB(PolarDB) AnalyticDB for PostgreSQL (ADB for PG)
AnalyticDB for MySQL(ADB for MySQL) Data Transmission Service (DTS) Server Load Balancer (SLB) Global Accelerator (GA) Cloud Enterprise Network (CEN)
Object Storage Service (OSS) Content Delivery Network (CDN) Short Message Service (SMS) Container Service for Kubernetes (ACK) Data Lake Analytics (DLA)

ApsaraDB for Redis (Redis)

ApsaraDB for MongoDB (MongoDB) NAT Gateway VPN Gateway Cloud Firewall
Anti-DDoS Web Application Firewall (WAF) Log Service DataWorks MaxCompute
Elastic MapReduce (EMR) Elasticsearch

Alibaba Cloud Free Trail

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.