您的位置:首页 > 编程语言 > PHP开发

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");

*/

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: