基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)

前端之家收集整理的这篇文章主要介绍了基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

PHP导入到excel乱码是因为utf8编码在xp系统不支持所有utf8编码转码一下就完美解决

utf-8编码案例

PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="74280" class="copybut" id="copybut74280" onclick="doCopy('code74280')"> 代码如下:
<div class="codebody" id="code74280">
<?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代码
<div class="codetitle"><a style="CURSOR: pointer" data="65994" class="copybut" id="copybut65994" onclick="doCopy('code65994')"> 代码如下:
<div class="codebody" id="code65994">
<?
$filename="PHP导入到excel-utf-8编码";
$filename=iconv("utf-8","gb2312",$filename);
echo $filename;
?>

gbk编码案例

PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="74280" class="copybut" id="copybut74280" onclick="doCopy('code74280')"> 代码如下:
<div class="codebody" id="code74280">
<?PHP
header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate,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代码
<div class="codetitle"><a style="CURSOR: pointer" data="83489" class="copybut" id="copybut83489" onclick="doCopy('code83489')"> 代码如下:
<div class="codebody" id="code83489">
0.<?
0.$filename="PHP导入到excel-utf-8编码";
0.echo $filename;
0.?>

访问网站的时候就下载到excel里面
要弄单元格区别的话
用table表格做网页的就可以了
====================== 其他方法 =============================

1、制作简单 Excel

<div class="codetitle"><a style="CURSOR: pointer" data="64926" class="copybut" id="copybut64926" onclick="doCopy('code64926')"> 代码如下:<div class="codebody" id="code64926">
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

<div class="codetitle"><a style="CURSOR: pointer" data="47173" class="copybut" id="copybut47173" onclick="doCopy('code47173')"> 代码如下:<div class="codebody" id="code47173">
<?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","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 "
";
echo "生成csv文件";
?>

也可以做一个封闭函数

封闭函数一:

<div class="codetitle"><a style="CURSOR: pointer" data="73876" class="copybut" id="copybut73876" onclick="doCopy('code73876')"> 代码如下:<div class="codebody" id="code73876">
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,-1);
$schema_insert .= $tmp_str;
$out .= $schema_insert;
$out .= $csv_terminated;
} // end while
header("Cache-Control: must-revalidate,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');
/

封闭函数二:

<div class="codetitle"><a style="CURSOR: pointer" data="93766" class="copybut" id="copybut93766" onclick="doCopy('code93766')"> 代码如下:<div class="codebody" id="code93766">
<?
/
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","three");
$data[] = array(4,6);
$csv = new CSV_Writer($data);
$csv->headers('test');
$csv->output();
/

3. 使用excel类

<div class="codetitle"><a style="CURSOR: pointer" data="60654" class="copybut" id="copybut60654" onclick="doCopy('code60654')"> 代码如下:<div class="codebody" id="code60654">
<?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.cc','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',$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:
<div class="codetitle"><a style="CURSOR: pointer" data="59990" class="copybut" id="copybut59990" onclick="doCopy('code59990')"> 代码如下:<div class="codebody" id="code59990">
<?
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 "
";
}
?>

例2:
<div class="codetitle"><a style="CURSOR: pointer" data="35423" class="copybut" id="copybut35423" onclick="doCopy('code35423')"> 代码如下:<div class="codebody" id="code35423">
<?
require "excel_class.PHP";
Read_Excel_File("Book1.xls",$return);
Create_Excel_File("ddd.xls",$return[Sheet1]);
?>

猜你在找的PHP相关文章