Php生成Excel文件如此简单
2009-03-25 01:36
627 查看
前阵子做了一个调查的小小项目。客户的想法是通过后台能将收集到的资料导出到Excel文件中,这样方便阅读,方便保存,及提取信息。
于是我就开始动手了:-),分析了一下这个小小项目,对于我来说最大的难点就是生成Excel文件。本人只是一个小小站长。生成Excel文件之前也没搞过。当时只知道这么一点点:先用php header()出一个Excel头,然后后面跟上Excel的XML代码,这样就能导出Excel功能了。但是Excel头是什么? Excel的XML写法又如何写呢?一直不明!
于是又开始我的g.cn之旅……最终功夫不负有心人,被我找到了一个外国老大写的程序,原名为:class-excel-xml.inc.php。我在未争得此牛人同意的情况下做了如下修改,于是我的那个小小项目不到一天完工,客户也比较满意,毕竟他要求的功能咱实现了!
如您也对生成Excel而烦恼,可以看一下此段代码:
>>>点击下载源文件<<<
PHP代码
<?php
/**
* Excel vendor By dx_andy
* 整理自 class-excel-xml.inc.php
* 时间 2008-3-27 11:58
* 文件编码 utf-8
*
*
* 整理记录:
* 原文件中(function addRow) utf8_encode($v) => $v
* 并添加判断字符串是 数字型 还是 字符串型的方法
*/
class Excel{
/**
* Header of excel document (prepended to the rows)
*
* Copied from the excel xml-specs.
*
* @access private
* @var string
*/
var $header = "<?xml version=/"1.0/" encoding=/"UTF-8/"?/>
<Workbook xmlns=/"urn:schemas-microsoft-com:office:spreadsheet/"
xmlns:x=/"urn:schemas-microsoft-com:office:excel/"
xmlns:ss=/"urn:schemas-microsoft-com:office:spreadsheet/"
xmlns:html=/"http://www.w3.org/TR/REC-html40/">";
/**
* Footer of excel document (appended to the rows)
*
* Copied from the excel xml-specs.
*
* @access private
* @var string
*/
var $footer = "</Workbook>";
/**
* Document lines (rows in an array)
*
* @access private
* @var array
*/
var $lines = array ();
/**
* Worksheet title
*
* Contains the title of a single worksheet
*
* @access private
* @var string
*/
var $worksheet_title = "Table1";
/**
* Add a single row to the $document string
*
* @access private
* @param array 1-dimensional array
* @todo Row-creation should be done by $this->addArray
*/
function addRow ($array) {
// initialize all cells for this row
$cells = "";
// foreach key -> write value into cells
foreach ($array as $k => $v):
// 加个字符串与数字的判断 避免生成的 excel 出现数字以字符串存储的警告
if(is_numeric($v)) {
// 防止首字母为 0 时生成 excel 后 0 丢失
if(substr($v, 0, 1) == 0) {
$cells .= "<Cell><Data ss:Type=/"String/">" . $v . "</Data></Cell>/n";
} else {
$cells .= "<Cell><Data ss:Type=/"Number/">" . $v . "</Data></Cell>/n";
}
} else {
$cells .= "<Cell><Data ss:Type=/"String/">" . $v . "</Data></Cell>/n";
}
endforeach;
// transform $cells content into one row
$this->lines[] = "<Row>/n" . $cells . "</Row>/n";
}
/**
* Add an array to the document
*
* This should be the only method needed to generate an excel
* document.
*
* @access public
* @param array 2-dimensional array
* @todo Can be transfered to __construct() later on
*/
function addArray ($array) {
// run through the array and add them into rows
foreach ($array as $k => $v):
$this->addRow ($v);
endforeach;
}
/**
* Set the worksheet title
*
* Checks the string for not allowed characters (://?*),
* cuts it to maximum 31 characters and set the title. Damn
* why are not-allowed chars nowhere to be found? Windows
* help's no help…
*
* @access public
* @param string $title Designed title
*/
function setWorksheetTitle ($title) {
// strip out special chars first
$title = preg_replace ("/[///|:|//|/?|/*|/[|/]]/", "", $title);
// now cut it to the allowed length
$title = substr ($title, 0, 31);
// set title
$this->worksheet_title = $title;
}
/**
* Generate the excel file
*
* Finally generates the excel file and uses the header() function
* to deliver it to the browser.
*
* @access public
* @param string $filename Name of excel file to generate (…xls)
*/
function generateXML ($filename) {
// deliver header (as recommended in php manual)
header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
header("Content-Disposition: inline; filename=/"" . $filename . ".xls/"");
// print out document to the browser
// need to use stripslashes for the damn ">"
echo stripslashes ($this->header);
echo "/n<Worksheet ss:Name=/"" . $this->worksheet_title . "/">/n<Table>/n";
echo "<Column ss:Index=/"1/" ss:AutoFitWidth=/"0/" ss:Width=/"110/"/>/n";
echo implode ("/n", $this->lines);
echo "</Table>/n</Worksheet>/n";
echo $this->footer;
}
}
/**
* CakePHP中使用方法
* 注意 ** cakePHP 配置文件 define('DEBUG', 0);
*
* vendor ('Excel');
* $doc = array (
* 0 => array ('中国', '中国人', '中国人民', '123456");
* );
* $xls = new Excel;
* $xls->addArray ( $doc );
* $xls->generateXML ("mytest");
*/
/**
* 非框架使用方法
*
* require_once('excel.php');
* $doc = array (
* 0 => array ('中国', '中国人', '中国人民', '123456");
* );
* $xls = new Excel;
* $xls->addArray ( $doc );
* $xls->generateXML ("mytest");
*/
?>
于是我就开始动手了:-),分析了一下这个小小项目,对于我来说最大的难点就是生成Excel文件。本人只是一个小小站长。生成Excel文件之前也没搞过。当时只知道这么一点点:先用php header()出一个Excel头,然后后面跟上Excel的XML代码,这样就能导出Excel功能了。但是Excel头是什么? Excel的XML写法又如何写呢?一直不明!
于是又开始我的g.cn之旅……最终功夫不负有心人,被我找到了一个外国老大写的程序,原名为:class-excel-xml.inc.php。我在未争得此牛人同意的情况下做了如下修改,于是我的那个小小项目不到一天完工,客户也比较满意,毕竟他要求的功能咱实现了!
如您也对生成Excel而烦恼,可以看一下此段代码:
>>>点击下载源文件<<<
PHP代码
<?php
/**
* Excel vendor By dx_andy
* 整理自 class-excel-xml.inc.php
* 时间 2008-3-27 11:58
* 文件编码 utf-8
*
*
* 整理记录:
* 原文件中(function addRow) utf8_encode($v) => $v
* 并添加判断字符串是 数字型 还是 字符串型的方法
*/
class Excel{
/**
* Header of excel document (prepended to the rows)
*
* Copied from the excel xml-specs.
*
* @access private
* @var string
*/
var $header = "<?xml version=/"1.0/" encoding=/"UTF-8/"?/>
<Workbook xmlns=/"urn:schemas-microsoft-com:office:spreadsheet/"
xmlns:x=/"urn:schemas-microsoft-com:office:excel/"
xmlns:ss=/"urn:schemas-microsoft-com:office:spreadsheet/"
xmlns:html=/"http://www.w3.org/TR/REC-html40/">";
/**
* Footer of excel document (appended to the rows)
*
* Copied from the excel xml-specs.
*
* @access private
* @var string
*/
var $footer = "</Workbook>";
/**
* Document lines (rows in an array)
*
* @access private
* @var array
*/
var $lines = array ();
/**
* Worksheet title
*
* Contains the title of a single worksheet
*
* @access private
* @var string
*/
var $worksheet_title = "Table1";
/**
* Add a single row to the $document string
*
* @access private
* @param array 1-dimensional array
* @todo Row-creation should be done by $this->addArray
*/
function addRow ($array) {
// initialize all cells for this row
$cells = "";
// foreach key -> write value into cells
foreach ($array as $k => $v):
// 加个字符串与数字的判断 避免生成的 excel 出现数字以字符串存储的警告
if(is_numeric($v)) {
// 防止首字母为 0 时生成 excel 后 0 丢失
if(substr($v, 0, 1) == 0) {
$cells .= "<Cell><Data ss:Type=/"String/">" . $v . "</Data></Cell>/n";
} else {
$cells .= "<Cell><Data ss:Type=/"Number/">" . $v . "</Data></Cell>/n";
}
} else {
$cells .= "<Cell><Data ss:Type=/"String/">" . $v . "</Data></Cell>/n";
}
endforeach;
// transform $cells content into one row
$this->lines[] = "<Row>/n" . $cells . "</Row>/n";
}
/**
* Add an array to the document
*
* This should be the only method needed to generate an excel
* document.
*
* @access public
* @param array 2-dimensional array
* @todo Can be transfered to __construct() later on
*/
function addArray ($array) {
// run through the array and add them into rows
foreach ($array as $k => $v):
$this->addRow ($v);
endforeach;
}
/**
* Set the worksheet title
*
* Checks the string for not allowed characters (://?*),
* cuts it to maximum 31 characters and set the title. Damn
* why are not-allowed chars nowhere to be found? Windows
* help's no help…
*
* @access public
* @param string $title Designed title
*/
function setWorksheetTitle ($title) {
// strip out special chars first
$title = preg_replace ("/[///|:|//|/?|/*|/[|/]]/", "", $title);
// now cut it to the allowed length
$title = substr ($title, 0, 31);
// set title
$this->worksheet_title = $title;
}
/**
* Generate the excel file
*
* Finally generates the excel file and uses the header() function
* to deliver it to the browser.
*
* @access public
* @param string $filename Name of excel file to generate (…xls)
*/
function generateXML ($filename) {
// deliver header (as recommended in php manual)
header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
header("Content-Disposition: inline; filename=/"" . $filename . ".xls/"");
// print out document to the browser
// need to use stripslashes for the damn ">"
echo stripslashes ($this->header);
echo "/n<Worksheet ss:Name=/"" . $this->worksheet_title . "/">/n<Table>/n";
echo "<Column ss:Index=/"1/" ss:AutoFitWidth=/"0/" ss:Width=/"110/"/>/n";
echo implode ("/n", $this->lines);
echo "</Table>/n</Worksheet>/n";
echo $this->footer;
}
}
/**
* CakePHP中使用方法
* 注意 ** cakePHP 配置文件 define('DEBUG', 0);
*
* vendor ('Excel');
* $doc = array (
* 0 => array ('中国', '中国人', '中国人民', '123456");
* );
* $xls = new Excel;
* $xls->addArray ( $doc );
* $xls->generateXML ("mytest");
*/
/**
* 非框架使用方法
*
* require_once('excel.php');
* $doc = array (
* 0 => array ('中国', '中国人', '中国人民', '123456");
* );
* $xls = new Excel;
* $xls->addArray ( $doc );
* $xls->generateXML ("mytest");
*/
?>
相关文章推荐
- PHP中实现生成静态文件之简单方法一
- 读取数据库并生成excel文件--PHPExcel
- 以php为例直接用html生成excel文件
- PHP 使用 PHPExcel 库生成 Excel 文件
- XLSTransformer生成excel文件简单演示样例
- [置顶] 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题
- 【工具篇】Excel文件导出从未如此简单——EasyPOI的使用
- 用php生成excel文件
- 【PHP】PHP使用PHPExcel生成Excel表格文件(附带随机生成英文名函数)
- JAVA处理Excel文件---生成简单的Excel文件
- php导出Excel文件简单的方法(非PHPEXCEL)
- php生成excel文件示例代码
- PHP简单实现生成txt文件到指定目录的方法
- phpExcel读取excel文件 生成excel文件
- 简单php生成excel文档
- 用php生成一个excel文件(原理)
- XLSTransformer生成excel文件简单演示样例
- PHPexcel 生成 excel 文件
- JAVA处理Excel文件---生成简单的Excel文件
- php生成excel的另一种简单方法