`

超简单的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 类 性能还好 哈哈哈

 

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

相关推荐

    QT--生成Excel文件-CSDN博客.html

    适合QT新手

    java生成excel图表

    "Java生成Excel图表" Java生成Excel图表是使用Java语言来生成Excel图表的过程。Excel图表是指使用Excel软件生成的图表,例如柱状图、折线图、饼状图等。Java语言可以使用各种库和框架来生成Excel图表,例如...

    Python项目-自动办公-52 Excel-案例-用Excel画画.zip

    再者,`0407.xlsx`文件可能是项目的输入或输出示例,展示了如何在Excel中应用编程生成的艺术效果。可能包含了各种单元格颜色的设定,形成了一幅由数据构成的画作。 最后,"部署说明.txt"文件提供了运行项目所需的...

    Python源码自动办公-52 Excel-案例-用Excel画画.rar

    在本资源"Python源码自动办公-52 Excel-案例-用Excel画画.rar"中,主要探讨了如何利用Python编程语言来实现自动化处理Excel文件,特别是通过编程在Excel中进行艺术创作,即“用Excel画画”。这个案例展示了Python在...

    html-export-Excel.rar_EXCEL导出_excel_export-excel.js_html excel_j

    首先,我们来看`excel-export-excel.js`这个库的核心功能。它允许开发者通过编写JavaScript代码将HTML表格(`&lt;table&gt;`元素)转换为Excel文件。这种转换通常涉及到以下步骤: 1. **解析HTML表格**:库会遍历HTML文档...

    小程序微信登录--短信验证码--excel导出.rar

    在本资源包“小程序微信登录--短信验证码--excel导出.rar”中,包含了实现微信小程序登录功能、短信验证码验证以及Excel数据导出的核心技术。这些功能对于构建具有用户注册、登录和数据管理的小程序至关重要。以下是...

    ASP生成EXCEL并自动下载

    例如,可以使用Content-Type头设置为"application/vnd.ms-excel",告知浏览器这是一个Excel文件。然后,通过输出包含Excel数据的字符串,如CSV格式,浏览器会将其解析为Excel文件并提供下载选项。 CSV(Comma ...

    .NET如何生成EXCEL文件

    在.NET框架中生成Excel文件是常见的任务,尤其在数据导出、报表生成或者数据分析场景下。本文将深入探讨如何利用.NET技术,特别是C#或VB.NET语言,来创建Excel文件。我们将关注两种主要的方法:使用Microsoft Office...

    golang实现的读取excel模板批量生成excel工具.zip

    本项目"golang实现的读取excel模板批量生成excel工具"正是基于这一需求而设计的,它允许用户通过读取一个Excel模板来快速创建多个类似的Excel文件。 首先,我们来看这个工具的核心技术点。在Go中,处理Excel文件...

    基于PHP的-excel用于生成excel文档的函数库源码.zip

    本文将深入探讨基于PHP的Excel生成函数库,并以"基于PHP的-excel用于生成excel文档的函数库源码.zip"为例,解析其背后的原理和应用。 首先,我们需要了解的是,PHP中最常用的Excel生成库之一是PHPExcel。这个库允许...

    Spreadsheet_Excel_Writer 生成excel 实例

    接下来,让我们详细讲解如何创建一个简单的Excel文件: 1. 导入必要的模块: ```python import xlsxwriter ``` 2. 创建一个新的Excel工作簿对象: ```python workbook = xlsxwriter.Workbook('output.xlsx') ...

    java poi 根据excel模板生成excel文件

    在本文中,我们将深入探讨如何使用Java POI库根据已有的Excel模板生成新的Excel文件。 首先,理解“模板”在Excel中的概念非常重要。模板通常包含预设的格式、样式、公式和数据结构,可以作为创建新文件的基础。在...

    生成excel并打包成zip文件

    在IT行业中,生成Excel文件和将其打包成ZIP文件是一项常见的任务,特别是在数据处理、报表生成或文件传输等场景。这个任务通常涉及到编程语言中的文件操作和压缩库的使用。以下是对给定标题和描述中涉及知识点的详细...

    生成excel并上传至S3

    生成excel并上传到S3.不需要真正的生成excel文件,只需要拿到byte

    poi-3.0.2 生成excel表工具

    例如,创建一个简单的Excel表格的基本步骤如下: 1. 加载或创建`Workbook`对象: ```java Workbook workbook = new HSSFWorkbook(); // 对于.xls文件 Workbook workbook = new XSSFWorkbook(); // 对于.xlsx文件 ``...

    poi-java生成excel文档

    在Java开发中,Apache POI库是一个...总的来说,Apache POI库为Java开发者提供了一个强大的工具,使得与Excel文件的交互变得简单而高效。只要理解并熟练运用上述知识点,你就能在Java项目中轻松生成和操作Excel文档。

    java的poi生成excel图表demo

    在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成非常有用。 1. **Apache POI介绍** Apache POI是一个开源项目,提供了API来处理Microsoft Office格式的文件。在Java...

    Java生成excel文件

    Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件

    Python 自动办公- 在Excel中按条件筛选数据并存入新的表 Python源码

    Python 自动办公- 在Excel中按条件筛选数据并存入新的表 Python源码Python 自动办公- 在Excel中按条件筛选数据并存入新的表 Python源码Python 自动办公- 在Excel中按条件筛选数据并存入新的表 Python源码Python 自动...

    PHPCMS-formguide_export_utf-8-导出EXCEL表格功能

    通过这个功能,管理员可以将大量数据快速导出,用于离线分析、报表生成,或者与不支持直接数据库连接的其他应用程序进行数据交换。导出过程中,用户可能还可以选择数据筛选、排序、格式化等选项,以满足不同的需求。...

Global site tag (gtag.js) - Google Analytics