基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
程序员文章站
2022-04-05 08:00:32
php导入到excel乱码是因为utf8编码在xp系统不支持所有utf8编码转码一下就完美解决了utf-8编码案例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]);
?>
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]);
?>
推荐阅读
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)_PHP教程
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)_PHP教程
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)_php技巧
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)_php技巧
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)_PHP
-
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)