基于php導(dǎo)出到Excel或CSV的詳解(附utf8、gbk 編碼轉(zhuǎn)換)
更新時(shí)間:2013年06月25日 16:55:22 作者:
本篇文章是對(duì)php導(dǎo)出到Excel或CSV(附utf8、gbk 編碼轉(zhuǎn)換)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
php導(dǎo)入到excel亂碼是因?yàn)閡tf8編碼在xp系統(tǒng)不支持所有utf8編碼轉(zhuǎn)碼一下就完美解決了
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導(dǎo)入到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導(dǎo)入到excel-utf-8編碼";
0.echo $filename;
0.?>
訪問(wèn)網(wǎng)站的時(shí)候就下載到excel里面
要弄單元格區(qū)別的話(huà)
用table表格做網(wǎng)頁(yè)的就可以了
====================== 其他方法 =============================
1、制作簡(jiǎn)單 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、制作簡(jiǎn)單 CSV
<?php
$action =$_GET['action'];
if ($action=='make'){
$fp = fopen("demo_csv.csv","a"); //打開(kāi)csv文件,如果不存在則創(chuàng)建
$title = array("First_Name","Last_Name","Contact_Email","Telephone"); //第一行數(shù)據(jù)
$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); // 寫(xiě)入數(shù)據(jù)
fclose($fp); //關(guān)閉文件句柄
echo "生成成功";
}
echo "<br>";
echo "<a href='?action=make'>生成csv文件</a>";
?>
也可以做一個(gè)封閉函數(shù):
封閉函數(shù)一:
function exportToCsv($csv_data, $filename = 'export.csv') {
$csv_terminated = "/n";
$csv_separator = ",";
$csv_enclosed = '"';
$csv_escaped = "http://";
// 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');
*/
封閉函數(shù)二:
<?
/**
* 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類(lèi)
<?php
require_once 'Spreadsheet/Writer.php';
$workbook = new Spreadsheet_Excel_Writer();
/* 生成 CSV
$filename = date('YmdHis').'.csv';
$workbook->send($filename); // 發(fā)送 Excel 文件名供下載
*/
// 生成 Excel
$filename = date('YmdHis').'.xls';
$workbook->send($filename); // 發(fā)送 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 中寫(xiě)入數(shù)據(jù)
}
}
/*
$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 中寫(xiě)入數(shù)據(jù)
}
}
*/
$workbook->close(); // 完成下載
?>
類(lèi)二
-----函數(shù)說(shuō)明
讀取Excel文件
function Read_Excel_File($ExcelFile,$Result)
$ExcelFile Excel文件名
$Result 返回的結(jié)果
函數(shù)返回值 正常返回0,否則返回錯(cuò)誤信息
返回的值數(shù)組
$result[sheet名][行][列] 的值為相應(yīng)Excel Cell的值
建立Excel文件
function Create_Excel_File($ExcelFile,$Data)
$ExcelFile Excel文件名
$Data Excel表格數(shù)據(jù)
請(qǐng)把函數(shù)寫(xiě)在PHP腳本的開(kāi)頭
例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]);
?>
utf-8編碼案例
Php代碼
復(fù)制代碼 代碼如下:
<?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代碼
復(fù)制代碼 代碼如下:
<?
$filename="php導(dǎo)入到excel-utf-8編碼";
$filename=iconv("utf-8", "gb2312", $filename);
echo $filename;
?>
gbk編碼案例
Php代碼
復(fù)制代碼 代碼如下:
<?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代碼
復(fù)制代碼 代碼如下:
0.<?
0.$filename="php導(dǎo)入到excel-utf-8編碼";
0.echo $filename;
0.?>
訪問(wèn)網(wǎng)站的時(shí)候就下載到excel里面
要弄單元格區(qū)別的話(huà)
用table表格做網(wǎng)頁(yè)的就可以了
====================== 其他方法 =============================
1、制作簡(jiǎn)單 Excel
復(fù)制代碼 代碼如下:
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、制作簡(jiǎn)單 CSV
復(fù)制代碼 代碼如下:
<?php
$action =$_GET['action'];
if ($action=='make'){
$fp = fopen("demo_csv.csv","a"); //打開(kāi)csv文件,如果不存在則創(chuàng)建
$title = array("First_Name","Last_Name","Contact_Email","Telephone"); //第一行數(shù)據(jù)
$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); // 寫(xiě)入數(shù)據(jù)
fclose($fp); //關(guān)閉文件句柄
echo "生成成功";
}
echo "<br>";
echo "<a href='?action=make'>生成csv文件</a>";
?>
也可以做一個(gè)封閉函數(shù):
封閉函數(shù)一:
復(fù)制代碼 代碼如下:
function exportToCsv($csv_data, $filename = 'export.csv') {
$csv_terminated = "/n";
$csv_separator = ",";
$csv_enclosed = '"';
$csv_escaped = "http://";
// 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');
*/
封閉函數(shù)二:
復(fù)制代碼 代碼如下:
<?
/**
* 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類(lèi)
復(fù)制代碼 代碼如下:
<?php
require_once 'Spreadsheet/Writer.php';
$workbook = new Spreadsheet_Excel_Writer();
/* 生成 CSV
$filename = date('YmdHis').'.csv';
$workbook->send($filename); // 發(fā)送 Excel 文件名供下載
*/
// 生成 Excel
$filename = date('YmdHis').'.xls';
$workbook->send($filename); // 發(fā)送 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 中寫(xiě)入數(shù)據(jù)
}
}
/*
$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 中寫(xiě)入數(shù)據(jù)
}
}
*/
$workbook->close(); // 完成下載
?>
類(lèi)二
-----函數(shù)說(shuō)明
讀取Excel文件
function Read_Excel_File($ExcelFile,$Result)
$ExcelFile Excel文件名
$Result 返回的結(jié)果
函數(shù)返回值 正常返回0,否則返回錯(cuò)誤信息
返回的值數(shù)組
$result[sheet名][行][列] 的值為相應(yīng)Excel Cell的值
建立Excel文件
function Create_Excel_File($ExcelFile,$Data)
$ExcelFile Excel文件名
$Data Excel表格數(shù)據(jù)
請(qǐng)把函數(shù)寫(xiě)在PHP腳本的開(kāi)頭
例1:
復(fù)制代碼 代碼如下:
<?
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:
復(fù)制代碼 代碼如下:
<?
require "excel_class.php";
Read_Excel_File("Book1.xls",$return);
Create_Excel_File("ddd.xls",$return[Sheet1]);
?>
相關(guān)文章
使用ThinkPHP框架(thinkphp8.0)創(chuàng)建定時(shí)任的操作步驟
這篇文章給大家介紹了使用ThinkPHP框架(thinkphp8.0)創(chuàng)建定時(shí)任的操作步驟,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01php實(shí)現(xiàn)指定字符串中查找子字符串的方法
這篇文章主要介紹了php實(shí)現(xiàn)指定字符串中查找子字符串的方法,涉及php中strpos()函數(shù)查找字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03PHP實(shí)現(xiàn)鏈表的定義與反轉(zhuǎn)功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)鏈表的定義與反轉(zhuǎn)功能,結(jié)合實(shí)例形式分析了PHP鏈表的基本定義、添加、移除、遍歷以及兩種反轉(zhuǎn)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06PHP進(jìn)階學(xué)習(xí)之依賴(lài)注入與Ioc容器詳解
這篇文章主要介紹了PHP進(jìn)階學(xué)習(xí)之依賴(lài)注入與Ioc容器,結(jié)合實(shí)例形式詳細(xì)分析了依賴(lài)注入與Ioc容器概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-06-06PHP實(shí)現(xiàn)Snowflake生成分布式唯一ID的方法示例
這篇文章主要給大家介紹了關(guān)于PHP實(shí)現(xiàn)Snowflake生成分布式唯一ID的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08PHP中輸出轉(zhuǎn)義JavaScript代碼的實(shí)現(xiàn)代碼
最近在做天地圖是GIS集成··要輸出HTML到JavaScript里面··涉及到代碼轉(zhuǎn)義什么的比較麻煩··所以寫(xiě)個(gè)PHP的function2011-04-04配置php網(wǎng)頁(yè)顯示各種語(yǔ)法錯(cuò)誤
使用php集成開(kāi)發(fā)環(huán)境Appserv網(wǎng)頁(yè)會(huì)提示各種語(yǔ)法錯(cuò)誤,但自己配置開(kāi)發(fā)環(huán)境無(wú)法提示錯(cuò)誤,這種情況該怎么解決呢?感興趣的朋友可以了解下本文2013-09-09