Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erläuterung des Exports nach Excel oder CSV auf Basis von PHP (mit UTF8- und GBK-Kodierungskonvertierung)

Detaillierte Erläuterung des Exports nach Excel oder CSV auf Basis von PHP (mit UTF8- und GBK-Kodierungskonvertierung)

高洛峰
Freigeben: 2023-03-04 10:24:02
Original
1468 Leute haben es durchsucht

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 "); 
?>
Nach dem Login kopieren
Nach dem Login kopieren

Php代码

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

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 "); 
?>
Nach dem Login kopieren
Nach dem Login kopieren

Php代码

0.<?    
0.$filename="php导入到excel-utf-8编码";    
0.echo $filename;    
0.?>
Nach dem Login kopieren

访问网站的时候就下载到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.?>
Nach dem Login kopieren

2、制作简单 CSV

<?php
$action =$_GET[&#39;action&#39;];
if ($action==&#39;make&#39;){
 $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); //用 &#39; 分割成字符串
 $data_1 = implode(",",$data_1); // 用 &#39; 分割成字符串
 $data_2 = implode(",",$data_2); // 用 &#39; 分割成字符串
 $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=&#39;?action=make&#39;>生成csv文件</a>";
?>
Nach dem Login kopieren

也可以做一个封闭函数:
封闭函数一:

function exportToCsv($csv_data, $filename = &#39;export.csv&#39;) {
    $csv_terminated = "/n";
    $csv_separator = ",";
    $csv_enclosed = &#39;"&#39;;
    $csv_escaped = "//";
    // Gets the data from the database
    $schema_insert = &#39;&#39;;
    $out = &#39;&#39;;
    // Format the data
    foreach ($csv_data as $row)
    {
        $schema_insert = &#39;&#39;;
        $fields_cnt = count($row);
        //printr($row);
        $tmp_str = &#39;&#39;;
        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(&#39;Name&#39;, &#39;Address&#39;));
array_push($csv_data, array($row[&#39;name&#39;],$row[&#39;address&#39;]));
...
exportToCsv($csv_data,&#39;new_file.csv&#39;);
*/
Nach dem Login kopieren

封闭函数二:

<?
/**
 * 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(&#39;CSV_Writer only accepts data as arrays&#39;);
        }
        $this->data = $data;
        $this->deliminator = $deliminator;
    }
    private function wrap_with_quotes($data)
    {
        $data = preg_replace(&#39;/"(.+)"/&#39;, &#39;""$1""&#39;, $data);
        return sprintf(&#39;"%s"&#39;, $data);
    }
    /**
     * Echos the escaped CSV file with chosen delimeter
     *
     * @return void
     */
    public function output()
    {
        foreach ($this->data as $row)
        {
            $quoted_data = array_map(array(&#39;CSV_Writer&#39;, &#39;wrap_with_quotes&#39;), $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(&#39;Content-Type: application/csv&#39;);
        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(&#39;test&#39;);
$csv->output();
*/
Nach dem Login kopieren

3. 使用excel类

<?php
require_once &#39;Spreadsheet/Writer.php&#39;;
$workbook = new Spreadsheet_Excel_Writer();
/* 生成 CSV
$filename = date(&#39;YmdHis&#39;).&#39;.csv&#39;;
$workbook->send($filename); // 发送 Excel 文件名供下载
*/
// 生成 Excel
$filename = date(&#39;YmdHis&#39;).&#39;.xls&#39;;
$workbook->send($filename); // 发送 Excel 文件名供下载
$workbook->setVersion(8);
$workbook->setBIFF8InputEncoding(&#39;UTF-8&#39;);
$worksheet =& $workbook->addWorksheet("Sheet-1");
$data[]= array(&#39;id&#39;,&#39;username&#39;,&#39;company&#39;,&#39;email&#39;,&#39;mob&#39;,&#39;daytime&#39;,&#39;intent&#39;);
$data[] = array(1,&#39;老梁&#39;,&#39;**工作室&#39;,&#39;jb51.net&#39;,&#39;1363137966*&#39;,time(),&#39;y&#39;);
$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(&#39;id&#39;,&#39;username&#39;,&#39;company&#39;,&#39;email&#39;,&#39;mob&#39;,&#39;daytime&#39;,&#39;intent&#39;);
$data[] = array(1,&#39;老梁&#39;,&#39;**工作室&#39;,&#39;jb51.net&#39;,&#39;1363137966*&#39;,time(),&#39;y&#39;);
$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(); // 完成下载
?>
Nach dem Login kopieren

类二
-----函数说明
读取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>";
}
?>
Nach dem Login kopieren

例2:

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

更多基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)相关文章请关注PHP中文网!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage