[置顶] 超简单的XmlExcelExport-生成Excel

来源:互联网 发布:小米note3软件 编辑:程序博客网 时间:2024/06/05 19:12
<?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 类 性能还好 哈哈哈

 

  • 大小: 32.9 KB
  • 带中文注释的Linux0.11-源代码.rar (288.6 KB)
  • 下载次数: 20
  • LINUX内核完全注释.rar (4.8 MB)
  • 下载次数: 11
  • ACCESS数据库使用的语句.rar (201.9 KB)
  • 下载次数: 9
  • XmlExcelExport.class.rar (1.7 KB)
  • 下载次数: 39
  • 查看图片附件
0 0