最土团购中的 .php excel怎么打印当前页控制下载当前页的excel表格

官方学习交流QQ群:&&&&站长QQ:
提供主流cms教程
提供数据库教程和设计
提供各种常见网页js代码
提供常用的JS特效代码及在线演示
提供jQuery插件教程及插件下载
提供服务器常见问题及教程
提供站长技术、站长资讯等内容
提供常用开发手册和开发工具
您现在的位置:& >
PHP导入导出excel表格图片的代码和方法大全
导读:最近因项目需要,需要开发一个模块,把系统中的一些数据导出成Excel,修改后再导回系统。就趁机对这个研究了一番,下面进行一些总结。写exc...
最近因项目需要,需要开发一个模块,把系统中的一些数据导出成Excel,修改后再导回系统。就趁机对这个研究了一番,下面进行一些总结。
写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了。呵呵。(COM方式不讲了,这种可读的太多了,我也写过利用wps等进行word等的生成之类的文章 )
但是在读的时候,只用过一种,具体是什么忘了,要回去翻代码了。
基本上导出的文件分为两种:
1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已。修改这种文件后再保存,通常会提示你是否要转换成Excel文件。
优点:简单。
缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序。
2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式。
如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:
$yourStr = mb_convert_encoding(&gb2312&P, &UTF-8&P, $yourStr);
下面详细列举几种方法。包括php导出excel,php导入excel,php生成excel实例
PHP导出Excel
1:第一推荐无比风骚的PHPExcel,官方网站: /PHPExcel
导入导出都成,可以导出office2007格式,同时兼容2003。
下载下来的包中有文档和例子,大家可以自行研究。
抄段例子出来:
getProperties()-&setCreator(&Maarten Balliauw&);&
$objPHPExcel-&getProperties()-&setLastModifiedBy(&Maarten Balliauw&);&
$objPHPExcel-&getProperties()-&setTitle(&Office 2007 XLSX Test Document&);&
$objPHPExcel-&getProperties()-&setSubject(&Office 2007 XLSX Test Document&);&
$objPHPExcel-&getProperties()-&setDescrīption(&Test document for Office 2007 XLSX, generated using PHP classes.&);&
$objPHPExcel-&getProperties()-&setKeywords(&office 2007 openxml php&);&
$objPHPExcel-&getProperties()-&setCategory(&Test result file&);&
// Add some data&
echo date(&H:i:s&) . & Add some data\n&;&
$objPHPExcel-&setActiveSheetIndex(0);&
$objPHPExcel-&getActiveSheet()-&setCellValue(&A1&, &Hello&);&
$objPHPExcel-&getActiveSheet()-&setCellValue(&B2&, &world!&);&
$objPHPExcel-&getActiveSheet()-&setCellValue(&C1&, &Hello&);&
$objPHPExcel-&getActiveSheet()-&setCellValue(&D2&, &world!&);&
// Rename sheet&
echo date(&H:i:s&) . & Rename sheet\n&;&
$objPHPExcel-&getActiveSheet()-&setTitle(&Simple&);&
// Set active sheet index to the first sheet, so Excel opens this as the first sheet&
$objPHPExcel-&setActiveSheetIndex(0);&
// Save Excel 2007 file&
echo date(&H:i:s&) . & Write to Excel2007 format\n&;&
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);&
$objWriter-&save(str_replace(&.php&, &.xlsx&, __FILE__));&
// Echo done&
echo date(&H:i:s&) . & Done writing file.\r\n&;
2、使用pear的Spreadsheet_Excel_Writer类
下载地址: http://pear.php.net/package/Spreadsheet_Excel_Writer
此类依赖于OLE,下载地址:http://pear.php.net/package/OLE
需要注意的是导出的Excel文件格式比较老,修改后保存会提示是否转换成更新的格式。
不过可以设定格式,很强大。
send(&test.xls&);&
// Creating a worksheet&
$worksheet =& $workbook-&addWorksheet(&My first worksheet&);&
// The actual data&
$worksheet-&write(0, 0, &Name&);&
$worksheet-&write(0, 1, &Age&);&
$worksheet-&write(1, 0, &John Smith&);&
$worksheet-&write(1, 1, 30);&
$worksheet-&write(2, 0, &Johann Schmidt&);&
$worksheet-&write(2, 1, 31);&
$worksheet-&write(3, 0, &Juan Herrera&);&
$worksheet-&write(3, 1, 32);&
// Let&s send the file&
$workbook-&close();&
3:利用smarty,生成符合Excel规范的XML或HTML文件
支持格式,非常完美的导出方案。不过导出来的的本质上还是XML文件,如果用来导入就需要另外处理了。
详细内容请见帮客之家另一文章:/jingyan/excelsmarty.html
需要注意的是如果导出的表格行数不确定时,最好在模板中把&ss:ExpandedColumnCount=&5&P ss:ExpandedRowCount=&21&P&之类的东西删掉。
4、利用pack函数打印出模拟Excel格式的断句符号,这种更接近于Excel标准格式,用office2003修改后保存,还不会弹出提示,推荐用这种方法。
缺点是无格式。
// Send Header
header(&Pragma: public&);
header(&Expires: 0&P);
header(&Cache-Control: must-revalidate, post-check=0, pre-check=0&P);
header(&Content-Type: application/force-download&);
header(&Content-Type: application/octet-stream&);
header(&Content-Type: application/download&);;
header(&Content-Disposition:filename=test.xls &);
header(&Content-Transfer-Encoding: binary &);
// XLS Data Cell
xlsWriteLabel(1,0,&My excel line one&);
xlsWriteLabel(2,0,&My excel line two : &);
xlsWriteLabel(2,1,&Hello everybody&);
function xlsBOF() {
echo pack(&ssssss&, 0&809, 0&8, 0&0, 0&10, 0&0, 0&0);
function xlsEOF() {
echo pack(&ss&, 0&0A, 0&00);
function xlsWriteNumber($Row, $Col, $Value) {
echo pack(&sssss&, 0&203, 14, $Row, $Col, 0&0);
echo pack(&d&, $Value);
function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack(&ssssss&, 0&204, 8 + $L, $Row, $Col, 0&0, $L);
不过笔者在64位linux系统中使用时失败了,断句符号全部变成了乱码。
5、使用制表符、换行符的方法 制表符&\t&用户分割同一行中的列,换行符&\t\n&可以开启下一行。
header(&Content-Type: application/vnd.ms-execl&);
header(&Content-Disposition: filename=myExcel.xls&);
header(&Pragma: no-cache&);
header(&Expires: 0&P);
/*first line*/
echo &hello&.&\t&;
echo &world&.&\t&;
echo &\t\n&;
/*start of second line*/
echo &this is second line&.&\t&;
echo &Hi,pretty girl&.&\t&;
echo &\t\n&;
6、使用com导出excel表格
如果你的PHP可以开启com模块,就可以用它来导出Excel文件
$filename = &c:/spreadhseet/test.xls&;
$sheet1 = 1;
$sheet2 = &sheet2&P;
$excel_app = new COM(&Excel.application&) or Die (&Did not connect&);
print &Application name: {$excel_app-&Application-&value}\n& ;
print &Loaded version: {$excel_app-&Application-&version}\n&;
$Workbook = $excel_app-&Workbooks-&Open(&$filename&) or Die(&Did not open $filename $Workbook&);
$Worksheet = $Workbook-&Worksheets($sheet1);
$Worksheet-&
$excel_cell = $Worksheet-&Range(&C4&P);
$excel_cell-&
$excel_result = $excel_cell-&
print &$excel_result\n&;
$Worksheet = $Workbook-&Worksheets($sheet2);
$Worksheet-&
$excel_cell = $Worksheet-&Range(&C4&P);
$excel_cell-&
$excel_result = $excel_cell-&
print &$excel_result\n&;
#To close all instances of excel:
$Workbook-&C
unset($Worksheet);
unset($Workbook);
$excel_app-&Workbooks-&Close();
$excel_app-&Quit();
unset($excel_app);
7.PHP通过PHPExcel类导出excel,同时对PHPExcel做了些精简处理,基本上可以满足数据导出excel的功能。
文件下载地址:/share/link?shareid=&uk=
代码如下:
//载入PHPExcel类
require './phpexcel/PHPExcel.php';
//创建一个excel对象实例
$objPHPExcel = new PHPExcel();
//设置文档基本属性
$objProps = $objPHPExcel-&getProperties();
$objProps-&setCreator(&Lao Mao&);
$objProps-&setLastModifiedBy(&Lao Mao&);
$objProps-&setTitle(&Office XLS Test Document&);
$objProps-&setSubject(&Office XLS Test Document, Demo&);
$objProps-&setDescription(&Test document, generated by PHPExcel.&);
$objProps-&setKeywords(&office excel PHPExcel&);
$objProps-&setCategory(&Test&);
//设置当前的sheet索引,用于后续的内容操作。
//一般只有在使用多个sheet的时候才需要显示调用。
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
$objPHPExcel-&setActiveSheetIndex(0);
//设置当前活动sheet的名称
$objActSheet = $objPHPExcel-&getActiveSheet();
$objActSheet-&setTitle('测试Sheet');
//设置单元格内容
//这里的数据可以从数据库中读取,然后再做循环处理
$objPHPExcel-&getActiveSheet()-&SetCellValue('A1', 'a1');
$objPHPExcel-&getActiveSheet()-&SetCellValue('A2', 'a2');
$objPHPExcel-&getActiveSheet()-&SetCellValue('A3', 'a3');
$objPHPExcel-&getActiveSheet()-&SetCellValue('A4', 'a4');
$objPHPExcel-&getActiveSheet()-&SetCellValue('A5', 'a5');
$objPHPExcel-&getActiveSheet()-&SetCellValue('B1', 'b1');
$objPHPExcel-&getActiveSheet()-&SetCellValue('B2', 'b2');
$objPHPExcel-&getActiveSheet()-&SetCellValue('B3', 'b3');
$objPHPExcel-&getActiveSheet()-&SetCellValue('B4', 'b4');
$objPHPExcel-&getActiveSheet()-&SetCellValue('B5', 'b5');
$objPHPExcel-&getActiveSheet()-&SetCellValue('C1', 'c1');
$objPHPExcel-&getActiveSheet()-&SetCellValue('C2', 'c2');
$objPHPExcel-&getActiveSheet()-&SetCellValue('C3', 'c3');
$objPHPExcel-&getActiveSheet()-&SetCellValue('C4', 'c4');
$objPHPExcel-&getActiveSheet()-&SetCellValue('C5', 'c5');
//输出文档
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
//设置header头部信息,并输出到浏览器
//header('Content-Type: application/vnd.ms-excel');
//header(&Content-Disposition: filename=demo.xls&);
//header('Cache-Control: max-age=0');
//$objWriter-&save('php://output');
//保存至某一位置
$objWriter-&save(dirname(__FILE__) . '/demo.xls');
PHP导入Excel
1:还是用PHPExcel,官方网站: /PHPExcel。
2:使用PHP-ExcelReader,下载地址: http://sourceforge.net/projects/phpexcelreader 举例:
&?php require_once &Excel/reader.php&; // ExcelFile($filename, $encoding); $data = new Spreadsheet_Excel_Reader(); // Set output Encoding. $data-&setOutputEncoding(&utf8&); $data-&read(& jxlrwtest.xls&); error_reporting(E_ALL ^ E_NOTICE); for ($i = 1; $i &= $data-&sheets[0]['numRows']; $i++) { for ($j = 1; $j &= $data-&sheets[0]['numCols']; $j++) { echo &\&&.$data-&sheets[0]['cells'][$i][$j].&\&,&; } echo &\n&; } ?&
这里分享通过php导入excel的方法:
文件下载地址:/share/link?shareid=&uk=
//载入PHPExcel类
include(dirname(__FILE__).'/phpexcel/PHPExcel.php');
$Obj = new PHPExcel_Reader_Excel5();
$Obj-&setReadDataOnly(true);
//读取demo.xls文件
$phpExcel = $Obj-&load(dirname(__FILE__).'/output.xls');
//获取当前活动sheet
$objWorksheet = $phpExcel-&getActiveSheet();
//获取行数
$highestRow = $objWorksheet-&getHighestRow();
//获取列数
$highestColumn = $objWorksheet-&getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
//循环输出数据
$data = array();
for($row = 1; $row &= $highestR ++$row) {
for($col = 0; $col & $highestColumnI ++$col) {
& $val = $objWorksheet-&getCellByColumnAndRow($col, $row)-&getValue();
& $data[$row][$col] = trim($val);
echo '&pre&';
print_r($data);
echo '&/pre&';
PHP 生成excel|好用强大的php excel类库
Magento的订单导出Excel功能,找了这个php的excel类 :PHPExcel。
PHPExcel是强大的 MS Office Excel 文档生成类库,基于Microsoft's OpenXML ,支持普通xls,Excel2007,pdf,csv,html等
比较大条的一个类库,官方最新版已经蹦到7.多M大了。找了个民间精简版1.多M的。
下面是这个PHP excel类库 的一些使用方法要点备忘。来自互联网。
//设置PHPExcel类库的include path
set_include_path('.'. PATH_SEPARATOR .
'D:\Zeal\PHP_LIBS' . PATH_SEPARATOR .
get_include_path());
* 如果使用 Excel5 ,输出的内容应该是GBK编码。
require_once 'PHPExcel.php';
// uncomment
////require_once 'PHPExcel/Writer/Excel5.php'; // 用于其他低版本xls
////require_once 'PHPExcel/Writer/Excel2007.php'; // 用于 excel-2007 格式
// 创建一个处理对象实例
$objExcel = new PHPExcel();
// 创建文件格式写入对象实例, uncomment
////$objWriter = new PHPExcel_Writer_Excel5($objExcel); // 用于其他版本格式
////$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于 2007 格式
//$objWriter-&setOffice2003Compatibility(true);
//*************************************
//设置文档基本属性
$objProps = $objExcel-&getProperties();
$objProps-&setCreator(&Zeal Li&);
$objProps-&setLastModifiedBy(&Zeal Li&);
$objProps-&setTitle(&Office XLS Test Document&);
$objProps-&setSubject(&Office XLS Test Document, Demo&);
$objProps-&setDescription(&Test document, generated by PHPExcel.&);
$objProps-&setKeywords(&office excel PHPExcel&);
$objProps-&setCategory(&Test&);
//*************************************
//设置当前的sheet索引,用于后续的内容操作。
//一般只有在使用多个sheet的时候才需要显示调用。
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
$objExcel-&setActiveSheetIndex(0);
$objActSheet = $objExcel-&getActiveSheet();
//设置当前活动sheet的名称
$objActSheet-&setTitle(&测试Sheet&);
//*************************************
//设置单元格内容
//由PHPExcel根据传入内容自动判断单元格内容类型
$objActSheet-&setCellValue(&A1&, &字符串内容&); // 字符串内容
$objActSheet-&setCellValue(&A2&, 26); // 数值
$objActSheet-&setCellValue(&A3&, true); // 布尔值
$objActSheet-&setCellValue(&A4&, &=SUM(A2:A2)&); // 公式
//显式指定内容类型
$objActSheet-&setCellValueExplicit(&A5&, &487584&,
PHPExcel_Cell_DataType::TYPE_STRING);
//合并单元格
$objActSheet-&mergeCells(&B1:C22&);
//分离单元格
$objActSheet-&unmergeCells(&B1:C22&);
//*************************************
//设置单元格样式
//设置宽度
$objActSheet-&getColumnDimension(&B&)-&setAutoSize(true);
$objActSheet-&getColumnDimension(&A&)-&setWidth(30);
$objStyleA5 = $objActSheet-&getStyle(&A5&);
//设置单元格内容的数字格式。
//如果使用了 PHPExcel_Writer_Excel5 来生成内容的话,
//这里需要注意,在 PHPExcel_Style_NumberFormat 类的 const 变量定义的
//各种自定义格式化方式中,其它类型都可以正常使用,但当setFormatCode
//为 FORMAT_NUMBER 的时候,实际出来的效果被没有把格式设置为&0&P。需要
//修改 PHPExcel_Writer_Excel5_Format 类源代码中的 getXf($style) 方法,
//在 if ($this-&_BIFF_version == 0&0500) { (第363行附近)前面增加一
//if($ifmt === &0&) $ifmt = 1;
//设置格式为PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大数字
//被使用科学记数方式显示,配合下面的 setAutoSize 方法可以让每一行的内容
//都按原始内容全部显示出来。
$objStyleA5
-&getNumberFormat()
-&setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
//设置字体
$objFontA5 = $objStyleA5-&getFont();
$objFontA5-&setName(&Courier New&);
$objFontA5-&setSize(10);
$objFontA5-&setBold(true);
$objFontA5-&setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objFontA5-&getColor()-&setARGB(&FF999999&);
//设置对齐方式
$objAlignA5 = $objStyleA5-&getAlignment();
$objAlignA5-&setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objAlignA5-&setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//设置边框
$objBorderA5 = $objStyleA5-&getBorders();
$objBorderA5-&getTop()-&setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5-&getTop()-&getColor()-&setARGB(&FFFF0000&); // color
$objBorderA5-&getBottom()-&setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5-&getLeft()-&setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5-&getRight()-&setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
//设置填充颜色
$objFillA5 = $objStyleA5-&getFill();
$objFillA5-&setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objFillA5-&getStartColor()-&setARGB(&FFEEEEEE&);
//从指定的单元格复制样式信息.
$objActSheet-&duplicateStyle($objStyleA5, &B1:C22&);
//*************************************
//添加图片
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing-&setName(&ZealImg&);
$objDrawing-&setDescription(&Image inserted by Zeal&);
$objDrawing-&setPath(&./zeali.net.logo.gif&);
$objDrawing-&setHeight(36);
$objDrawing-&setCoordinates(&C23&);
$objDrawing-&setOffsetX(10);
$objDrawing-&setRotation(15);
$objDrawing-&getShadow()-&setVisible(true);
$objDrawing-&getShadow()-&setDirection(36);
$objDrawing-&setWorksheet($objActSheet);
//添加一个新的worksheet
$objExcel-&createSheet();
$objExcel-&getSheet(1)-&setTitle(&测试2&);
//保护单元格
$objExcel-&getSheet(1)-&getProtection()-&setSheet(true);
$objExcel-&getSheet(1)-&protectCells(&A1:C22&, &PHPExcel&);
//*************************************
//输出内容
$outputFileName = &output.xls&;
////$objWriter-&save($outputFileName);
//到浏览器
////header(&Content-Type: application/force-download&);
////header(&Content-Type: application/octet-stream&);
////header(&Content-Type: application/download&);
////header(&Content-Disposition:filename=&&.$outputFileName.&&&);
////header(&Content-Transfer-Encoding: binary&);
////header(&Expires: Mon, 26 Jul :00 GMT&);
////header(&Last-Modified: & . gmdate(&D, d M Y H:i:s&) . & GMT&);
////header(&Cache-Control: must-revalidate, post-check=0, pre-check=0&P);
////header(&Pragma: no-cache&);
////$objWriter-&save(&php://output&);
这个php的excel类库 是目前见到功能最好的。
转载请注明(B5教程网)原文链接:/content-10-1031-1.html
网友评论:developerWorks 社区
向 Microsoft Excel 中的高级导出功能添加 PHP 来创建 XML 格式的灵活的 pivot 表。然后,您和用户就可以动态地排序和分析 pivot 表中的数据了。
, 高级软件工程师, Fortify Software, Inc.
Jack Herrington 是一位生活和工作在海湾地区的工程师、作家和主持人。您可以通过
来关注他的工作和作品。
六年前,我写了一篇文章 “”,介绍使用 PHP 将数据导出为 Microsoft® Excel® 电子表格。事实表明,那篇文章火了,足以保证此续篇文章也会火。第一篇文章只是浅尝辄止地涉及到 Excel 的强大功能。这篇文章中,我将向您展示如何使用其中一个更高级的特性——pivot 表,作为介绍 Excel 导出功能潜力的示例。利用高级 Excel 导出功能和 PHP 开始构建 pivot 表Pivot 表是这样一种数据表,用户可以动态地选择其中的哪些字段被用作行标题、列标题,以及被显示为每个单元格中的数据。用户可以动态地重新排列字段,从而能够回答复杂的问题,以及利用数据形成有趣的图案。 展示了一个基本的 Excel 电子表格。第一行包含字段名称(Account、Genre、Images、Average Ran、Total Size),后面的行包含数据。在本例中,您看到的是来自一个图像存储网站(例如 Flickr)的导出数据。每行包含一个给定帐户的信息,包括图像类型、已上传的图像数量、它们的平均评级和包含的所有图像的总大小(字节数)。图 1. 基本的 Excel 表要在 Excel 中构建 pivot 表,您需要选择将用在 pivot 表中的数据列,然后从 Data 菜单选择 PivotTable Report 菜单项。然后向导会提示您指定哪些数据用于报告。向导完成后,一个新的工作表被添加到 Excel 文件。 展示了一个空的 pivot 表,窗口上浮动着 PivotTable 工具栏。电子表格包含很多区域,您可以拖动其中的每个字段条目以生成报告。图 2. 构建 pivot 表 更详细地展示了 PivotTable 工具栏。顶部是 PivotTable 菜单和一些用于控制表深度的工具栏按钮。工具栏底部是一些可用的字段(Account、Genre、Images、Average Ran、Total Size)。图 3. pivot 工具栏要调整 pivot 表,您需要选择字段,并将它们拖放到页面上适当的区域。 展示了依次拖动 genre、account 和 total size 到报告左侧数据区域的结果。图 4. 一个填充了数据的 pivot 表报告现在展示了首先按 genre 成组、然后按 account 成组的记录。然后展示了每个 account 的 sizes,再就是每个 genre 的 sizes 汇总,最后显示总计。调整显示数据的顺序就只是拖放字段而已。这对于探究数据是一个极其强大的机制,如果您的数据集很大或者很复杂,那么也值得花点精力去了解它。以 XML 格式保存 Excel 电子表格时,所有数据和 pivot 表参数都存储在 XML 文件中。 展示了一段此文件的示例。清单 1. 示例 Excel 导出&?xml version="1.0"?&
&Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:dt="uuid:C2F-11d1-A29F-00AA00C14882"
xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40"&
&DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"&
&Author&Jack Herrington&/Author&
&LastAuthor&Jack Herrington&/LastAuthor&
&Created&T21:15:20Z&/Created&
&LastSaved&T21:45:33Z&/LastSaved&
&Company&Myself&/Company&
&Version&12.0&/Version&
&/DocumentProperties&
&/Workbook&示例 PHP 应用程序构建一个 Excel XML 文件,其中为原始数据和 PivotTable 分别具有一个工作簿。此 pivot 表标签具有所有可用的动态功能,就像是您在 Excel 中创建的一样。首先需要的是将放入电子表格中的数据。得到数据为了让工作更轻松,将数据存储在
那样的 XML 文件中。清单 2. data.xml&users&
&user account="Megan" genre="Portraits" images="20"
avgrank="4.0" size="72000" /&
&user account="Hannah" genre="Landscapes" images="31"
avgrank="3.5" size="83000" /&
&user account="Vicky" genre="Floral" images="25"
avgrank="4.2" size="42000" /&
&user account="Ian" genre="Portraits" images="40"
avgrank="3.7" size="92000" /&
&user account="Michael" genre="Landscapes" images="23"
avgrank="3.8" size="72000" /&
&user account="Daniel" genre="Landscapes" images="29"
avgrank="4.4" size="85000" /&
&/users&XML 的根是 users 标记,它为每个用户都包含一个标记。每个 user 标记都包含 account、genre、images、avgrank 和 size 属性。这些属性存有每个 account 的相关数据。要读取数据,一个简单的 data.php 文件包含单个函数 load_data。该函数读取 XML,并作为一组散列表返回数据。 展示了该函数的代码。清单 3. data.php&?php
function load_data() {
$xmlDoc = new DOMDocument();
$xmlDoc-&load("data.xml");
$data = array();
foreach ($xmlDoc-&documentElement-&childNodes AS $item)
if ( $item-&nodeType == XML_ELEMENT_NODE ) {
$data []= array( "account" =& $item-&getAttribute("account"),
"genre" =& $item-&getAttribute("genre"),
"images" =& $item-&getAttribute("images"),
"avgrank" =& $item-&getAttribute("avgrank"),
"size" =& $item-&getAttribute("size") );
?&代码一开始是创建一个 DOMDocument 对象,用于从文件加载 XML。然后,foreach 循环迭代通过每个用户节点,并将它们的属性存储在 data 数组中。然后,此 data 数组被返回给调用者。除了数据读取程序之外,另一个函数 print_file 用于输出文件的所有内容。 展示了此函数。清单 4. helpers.php&?php
function print_file( $file ) {
print file_get_contents( $file );
?&采用 print_file 的原因很简单。Excel XML 文件很复杂,所以最简单的构建方式是从一个 XML 导出文件开始,利用文件的大块内容作为导出文件的种子代码。在本例中,您采用了文件顶部部分一直到定义第一个工作簿的地方,并将它们放入 body_header.txt 中。文件底部部分(最后一个工作簿完了之后)存储在 body_footer.txt 中。类似的文件 data_header.txt 和 data_footer.txt 组成电子表格 data 标签中的表。构建简单的 Excel 电子表格数据读取程序和文件输出程序已经就绪,您可以开始构建 Excel
电子表格了。 展示了 Excel 导出代码。清单 5. helpers.php&?php
require_once 'data.php';
require_once 'helpers.php';
require_once 'exporters.php';
$data = load_data();
print_file( 'body_header.txt' );
print_file( 'data_header.txt' );
&Table ss:ExpandedColumnCount="5"
ss:ExpandedRowCount="&?php echo( count($data) + 1 ) ?&" x:FullColumns="1"
x:FullRows="1"&
&Cell ss:StyleID="s21"&&Data ss:Type="String"&Account&/Data&&/Cell&
&Cell ss:StyleID="s21"&&Data ss:Type="String"&Genre&/Data&&/Cell&
&Cell ss:StyleID="s21"&&Data ss:Type="String"&Images&/Data&&/Cell&
&Cell ss:StyleID="s21"&&Data ss:Type="String"&Average Ranking&/Data&&/Cell&
&Cell ss:StyleID="s21"&&Data ss:Type="String"&Total Size&/Data&&/Cell&
&?php foreach( $data as $row ) { ?&
&Cell&&Data ss:Type="String"&&?php echo( $row['account'] ) ?&&/Data&&/Cell&
&Cell&&Data ss:Type="String"&&?php echo( $row['genre'] ) ?&&/Data&&/Cell&
&Cell&&Data ss:Type="Number"&&?php echo( $row['images'] ) ?&&/Data&&/Cell&
&Cell&&Data ss:Type="Number"&&?php echo( $row['avgrank'] ) ?&&/Data&&/Cell&
&Cell&&Data ss:Type="Number"&&?php echo( $row['size'] ) ?&&/Data&&/Cell&
&?php } ?&
print_file( 'data_footer.txt' );
print_file( 'body_footer.txt' );
?&代码首先读入数据,然后输出主体和数据表头。然后,XML 代码定义表,表的第一行有表头。然后,foreach 循环迭代通过每个数据项并利用数据创建一个新行。程序运行时,输出可以存储在一个将由 Excel 打开的文件中。结果应该类似于 。图 5. 从 PHP 导出的基本数据表 展示了出现在初始文件时被正确格式化的数据;第一行显示字段标题,后续的每一行提供数据。显然,您不会将这里原原本本的代码用于您的 Excel 导出,因为您的字段和数据会有所不同。但是构建数据表的过程是相同的,首先是创建 Excel 文件,然后去掉表头和表尾部分,最后在数据表中注入您自己的数据。构建 pivot 表Pivot 表电子表格稍微复杂一点,但是思路基本上是相同的。脚本一开始是读入数据,然后输出主体表头。然后依次为数据、pivot 表和表尾输出页面。 展示了此过程的代码。清单 6. build2.php&?php
require_once 'data.php';
require_once 'helpers.php';
require_once 'exporters.php';
header( 'Content-type: application/excel' );
header( 'Content-Disposition: filename="pivot.xml"' );
$data = load_data();
print_file( 'body_header.txt' );
export_data( $data );
export_pivot( $data );
print_file( 'body_footer.txt' );
?&开始的头部函数调用也很有趣,因为它们告诉浏览器对文件做些什么。Content-type 头部告诉浏览器,脚本在导出一个 Excel 电子表格。Content-disposition 头部告诉浏览器该电子表格应该被存储为文件,并推荐一个名称,本例中是 pivot.xml。大量的工作是用导出函数完成的,导出函数定义在
中的 exporters.php 文件中。清单 7. exporters.php&?php
require_once 'helpers.php';
function export_data( $data ) {
print_file( 'data_header.txt' );
&Table ss:ExpandedColumnCount="5"
ss:ExpandedRowCount="&?php echo( count($data) + 1 ) ?&" x:FullColumns="1"
x:FullRows="1"&
print_file( 'data_footer.txt' );
function export_pivot( $data ) {
&Worksheet ss:Name="Pivot 1"&
export_pivot_table( $data );
export_pivot_worksheet_options( $data );
export_pivot_pivottable( $data );
&/Worksheet&
export_pivotcache( $data );
function export_pivot_table( $data ) {
&Table ss:ExpandedColumnCount="2"
ss:ExpandedRowCount="&?php echo( count($data) + 5 ) ?&" x:FullColumns="1"
x:FullRows="1"&
&Column ss:Width="96.0"/&
&Column ss:AutoFitWidth="0" ss:Width="49.0"/&
&Row ss:Index="3"&
&Cell ss:StyleID="s22"&
&Data ss:Type="String"&Sum of Total Size&/Data&
&Cell ss:StyleID="s24"/&
&Cell ss:StyleID="s34"&
&Data ss:Type="String"&Account&/Data&
&Cell ss:StyleID="s24"&
&Data ss:Type="String"&Total&/Data&
$total = 0;
foreach( $data as $row ) {
$total += intval( $row['size'] );
&Cell ss:StyleID="s22"&
&Data ss:Type="String"&&?php echo( $row['account'] ) ?&&/Data&
&Cell ss:StyleID="s26"&
&Data ss:Type="Number"&&?php echo( $row['size'] ) ?&&/Data&
&?php } ?&
&Cell ss:StyleID="s31"&
&Data ss:Type="String"&Grand Total&/Data&
&Cell ss:StyleID="s33"&
&Data ss:Type="Number"&&?php echo( $total ) ?&&/Data&
function export_pivot_pivottable( $data ) {
&PivotTable xmlns="urn:schemas-microsoft-com:office:excel"&
&/PivotTable&
function export_pivot_worksheet_options( $data ) {
&WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"&
&/WorksheetOptions&
function export_pivotcache( $data ) {
&PivotCache xmlns="urn:schemas-microsoft-com:office:excel"&
&?php foreach( $data as $row ) { ?&
&row Col1="&?php echo( $row['account'] ) ?&" Col2="&?php echo( $row['genre'] ) ?&"
Col3="&?php echo( $row['images'] ) ?&" Col4="&?php echo( $row['avgrank'] ) ?&"
Col5="&?php echo( $row['size'] ) ?&" xmlns="#RowsetSchema"/&
&?php } ?&
&/PivotCache&
?&为了节省篇幅,这些函数的大部分内容都省去了。完整的、可以工作的代码可从 excelpivotxml.zip 下载文件得到(参见 )。第一个函数 —— export_data 做第一个脚本所做的事情,以导出数据。为了创建 pivot 表标签,export_pivot 函数首先创建一个工作表,然后添加数据表、工作表选项和 PivotTable XML。最后的 PivotCache 创建发生在工作表完成之后。老实讲,我不知道为什么 pivot 表的定义需要这么多的 XML 代码。无疑,对于简单的数据表来说,需要的代码更多。但是好在可以在 Excel 中创建 pivot 表,保存为 XML,然后使用该 XML 代码作为您自己代码的模板。运行 PHP 脚本之后,将结果保存到文件,然后在 Excel 中打开,会看到类似于
中的表。图 6. 导出的 pivot 表在
中,pivot 表展示了每一个 account、它们的大小 total,最后还有一个 grand total。Excel pivot 表已正确创建,所以窗口上显示一个 PivotTable 工具栏。使用该工具栏,用户可以添加字段和调整表。结束语Microsoft Excel 是一个相当强大的数据分析工具。但是它对存储在 PHP web 应用程序中的数据视而不见,除非您费点功夫将两者联系起来。当然,您可以导出 CSV 或另一种简单的文本格式,但是这给应用程序的用户带来负担,要他们去格式化数据和构建自己的报告。也意味着每次用户想要得到更新的数据时,都必须再次从新开始。XML 格式 Excel 的使用可能要稍微复杂一点,但是您可以使用一个保存的 XML 文件作为构建您导出电子表格的模板。此方法大大简化了生成文件的过程,并且意味着您可以让用户构建他们想要看到的电子表格,然后您可以导出它们,用生动的数据动态地填充它们。这是一种优异的向客户提供新值的方式,同时仍然处于服务器的 PHP 和 XML 世界。
下载描述名字大小本文源代码---
参考资料 (Jack D. Herrington,developerWorks,2010 年 8 月更新,最初发布于 2005 年 10 月):阅读最初的 Excel PHP 文章,介绍了可以从(从 Microsoft Excel 2003 导出的)XML 读取数据的 PHP 中的 XML 支持。(Wikipedia):仔细研读这篇介绍 Excel 文件格式的文章,与类似的 XML 格式进行了一些比较,最值得一提的是 。:访问可用的 PHP 最佳参考资源。:探究这个很棒的网站,了解各种标准,包括与本文有关的 。:找到关于 Microsoft 网站的更多信息。(Wikipedia):所有 Microsoft Office 应用程序都支持 XML。如果 Excel 不符合您的需要,看其他哪种格式更适合您。(Jack Herrington,developerWorks,2005 年 3 月至今):阅读关于 Ajax、JSON、PHP、XML 和其他技术的文章。:在 XML 专区获取提高您的专业技能所需的资源。:找到丰富的 how-to 信息、工具和项目更新,帮助您用开放源码技术进行开发,并与 IBM 产品结合使用。还有我们最流行的 。:了解如何才能成为一名 IBM 认证的 XML 和相关技术的开发人员。:访问 developerWorks XML 专区,获得广泛的技术文章和技巧、教程、标准和 IBM 红皮书。此外,阅读更多的 。developerWorks
和 :随时关注这些活动中的技术。:收听面向软件开发人员的有趣访谈和讨论。:观看演示,内容包括面向初学者的产品安装和设置演示,以及为经验丰富的开发人员提供的高级功能。:下载或 ,并开始使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。:参与任何一个 XML 相关讨论。:查看开发人员推动的博客、论坛、组和 wikis,并与其他 developerWorks 用户交流。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
IBM PureSystems(TM) 系列解决方案是一个专家集成系统
通过学习路线图系统掌握软件开发技能
软件下载、试用版及云计算
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=XML, Open sourceArticleID=659378ArticleTitle=结合高级 Excel 导出功能和 PHP 创建 pivot 表publish-date=

我要回帖

更多关于 excel打印当前页 的文章

 

随机推荐