首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

超容易的XmlExcelExport-生成Excel

2012-10-21 
超简单的XmlExcelExport-生成Excel?php// 数据导出 类文件 -- 作者 色色/** * 导出 XML格式的 Excel 数据

超简单的XmlExcelExport-生成Excel

<?php// 数据导出 类文件 -- 作者 色色/** * 导出 XML格式的 Excel 数据 */class XmlExcelExport{/** * 文档头标签 *  * @var string */private $header = "<?xml version="1.0" encoding="%s"?\>\n<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">";/** * 文档尾标签 *  * @var string */private $footer = "</Workbook>";/** * 内容编码 * @var string */private $sEncoding;/** * 是否转换特定字段值的类型 *  * @var boolean */private $bConvertTypes;/** * 生成的Excel内工作簿的个数 *  * @var int */private $dWorksheetCount = 0;/** * 构造函数 *  * 使用类型转换时要确保:页码和邮编号以'0'开头 * * @param string $sEncoding 内容编码 * @param boolean $bConvertTypes 是否转换特定字段值的类型 */function __construct($sEncoding = 'UTF-8', $bConvertTypes = false){$this->bConvertTypes = $bConvertTypes;$this->sEncoding = $sEncoding;}/** * 返回工作簿标题,最大 字符数为 31 * * @param string $title 工作簿标题 * @return string */function getWorksheetTitle($title = 'Table1'){$title = preg_replace("/[\\\|:|\/|\?|\*|\[|\]]/", "", empty($title) ? 'Table' . ($this->dWorksheetCount + 1) : $title);return substr($title, 0, 31);}/** * 向客户端发送Excel头信息 * * @param string $filename 文件名称,不能是中文 */function generateXMLHeader($filename){$filename = preg_replace('/[^aA-zZ0-9\_\-]/', '', $filename);$filename = urlencode($filename);// 中文名称使用urlencode编码后在IE中打开能保存成中文名称的文件,但是在FF上却是乱码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/vnd.ms-excel; charset={$this->sEncoding}");header("Content-Transfer-Encoding: binary");header("Content-Disposition: attachment; filename={$filename}.xls");echo stripslashes(sprintf($this->header, $this->sEncoding));}/** * 向客户端发送Excel结束标签 * * @param string $filename 文件名称,不能是中文 */function generateXMLFoot(){echo $this->footer;}/** * 开启工作簿 *  * @param string $title */function worksheetStart($title){$this->dWorksheetCount ++;echo "\n<Worksheet ss:Name="" . $this->getWorksheetTitle($title) . "">\n<Table>\n";}/** * 结束工作簿 */function worksheetEnd(){echo "</Table>\n</Worksheet>\n";}/** * 设置表头信息 *  * @param array $header */function setTableHeader(array $header){echo $this->_parseRow($header);}/** * 设置表内行记录数据 *  * @param array $rows 多行记录 */function setTableRows(array $rows){foreach ($rows as $row) echo $this->_parseRow($row);}/** * 将传人的单行记录数组转换成 xml 标签形式 * * @param array $array 单行记录数组 */private function _parseRow(array $row){$cells = "";foreach ($row as $k => $v){$type = 'String';if ($this->bConvertTypes === true && is_numeric($v))$type = 'Number';$v = htmlentities($v, ENT_COMPAT, $this->sEncoding);$cells .= "<Cell><Data ss:Type="$type">" . $v . "</Data></Cell>\n";}return "<Row>\n" . $cells . "</Row>\n";}}
?

?

?

经过测试在Excel2007 ,? 单工作簿支持 10w条 以上的数据....

?

对于大数据量的导出,一次取出全部数据不太现实,容易内存溢出,建议分段提取,每次 提取 200 条数据

?

?

此类配合 我之前发的 coredb 类 性能还好 哈哈哈

?

超容易的XmlExcelExport-生成Excel

1 楼 vb2005xu 2011-09-14   米的qq601287035 2 楼 vb2005xu 2012-03-16   http://msdn.microsoft.com/en-us/library/aa140066%28v=office.10%29.aspx#odc_xmlss_ss:row 微软XML excel 格式

热点排行