<?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
分享到:
相关推荐
适合QT新手
springboot 导出excel 导入excel 生成excel 内容有点多 springboot 导出excel 导入excel 生成excel 内容有点多 springboot 导出excel 导入excel 生成excel 内容有点多 springboot 导出excel 导入excel 生成excel ...
PHP实例开发源码—php-excel 用于生成excel文档的php函数库.zip PHP实例开发源码—php-excel 用于生成excel文档的php函数库.zip PHP实例开发源码—php-excel 用于生成excel文档的php函数库.zip
poi-3.0.2 生成excel表工具,java生成excel表格时使用
exceleasy模板生成excel
Visual C++源代码 196 如何使用自动化生成Excel图表Visual C++源代码 196 如何使用自动化生成Excel图表Visual C++源代码 196 如何使用自动化生成Excel图表Visual C++源代码 196 如何使用自动化生成Excel图表Visual ...
如何用Ucinet生成网络结构图-只有excel中的原始数据.docx
项目内利用反射读取源,根据注解生成EXCEl表头。 供学习研究。。
生成excel并上传到S3.不需要真正的生成excel文件,只需要拿到byte
Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件
基于PHP的-excel 用于生成excel文档的函数库.zip
jquery.table2excel.js 可一键生成Excel表格,需要jQuery.js支持 详细使用方法可见我的博客 https://blog.csdn.net/weixin_42571089/article/details/108799543
利用jxl包结合java反射机制和注释,直接把list生成对应的Excel文件,即只需传入list、对应生成的对象、标题就可以生成excel文件write(String title, List list,Class c),实现一个简单生成excel工具类
基于PHP的-excel用于生成excel文档的函数库源码.zip
条码打印软件如何批量生成EAN-8商品条码-连接Excel.doc
java 生成Excel,可根据模板格式生成 Excel打印专用 报表 这个是旧版本的 ,需要新版本的 可以联系我
使用VC/C++生成excel的方式有很多,但是绝大部分要么是简单的csv文件,要么需要COM并已经安装ms excel,局限性比较大。 我这里提供一种使用C++编写以html脚本的方式生成xls文件的方法。不使用任何非C++标准库,支持...