PHP例子:生成EXCEL数据
2009-03-25 13:52
369 查看
PHP例子:生成EXCEL数据
在编程时,为了简化最后的数据处理,或者为了照顾最终用户的使用习惯,我们可能会遇到需要把一些数据输出为EXCEL文件的功能。
在编程时,为了简化最后的数据处理,或者为了照顾最终用户的使用习惯,我们可能会遇到需要把一些数据输出为EXCEL文件的功能。
程序生成EXCEL文件的标准方法,是通过DCOM调用EXCEL真正的生成EXCEL文件。以下的VBSCRIPT的例子: 以下是vbscript的例子 Dim xlApp,xlBook,XlSheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.add Set XlSheet = xlBook.Worksheets(1) xlApp.Caption="test表" XlSheet.name = "test表" XlSheet.Rows("1:1").RowHeight = 36.6 XlSheet.Range("A1").FormulaR1C1 = "test" XlSheet.Range("A1").Font.Bold = True XlSheet.Range("A1").Font.ColorIndex = 3 XlSheet.Range("A1").Font.Size = 16 xlApp.Visible=true set xlApp = nothing set xlBook= nothing set xlSheet = nothing 但是这个方法要求运行脚本的机器上要安装EXCEL,而当作为JSP/PHP的脚本运行在UNIX/LINUX服务器上时,这是不可能的,是的我们不得不向办法自己生成EXEL文件。 自己生成EXCEL文件难度太大,我们一般都是挂羊头卖狗肉的办法,生成CVS文件、HTML文件、XML文件内容,取个扩展名为.XLS,让EXCEL自己看着办。 CVS比较简单,就是按行输出数据,每一行各个数据之间用逗号或者<TAB>分隔,但是不能控制单元格的格式。HTML也很简单,主要使用HTML里面有关<TABLE><TR><TD>等代码,可以设置表格的一些格式,但是不能处理多个工作表,而且不能设定单元格的数据类型。 XML方法是本文的重点,XML几乎可以实现EXCEL的所有功能。我最初发现这个是我手机保存的.XLS文件,无聊的时候用记事本打开看了看原来是XML格式,在PC上也可以打开。学习XML如何表达EXCEL功能比较容易,直接用EXCEL建立一个简单文件,保存为XML格式,用记事本查看里面的内容就明白了。 以下是我用PHP编写的把MYSQL数据库SQL语句输出结果保存为EXCEL的脚本文件,假设你命名文件为mysql_excel.php,那么调用此脚本使用一个statement参数传递SQL语句,可选的header参数指定SQL语句结果各字段的中文标题。 <?php set_time_limit(300); $head_str=''; $tail_str=''; if (isset($_REQUEST["statement"])){//执行提交的命令 //输出表头 header('Content-type: application/excel'); header('Content-Disposition: attachment; filename="mysql.xls"'); echO <<<END <?xml version="1.0" encoding="GBK"?> <?mso-application progid="Excel.Sheet"?> <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: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>lpicc</Author> <LastAuthor>lpicc</LastAuthor> <Created>2008-03-03T05:17:03Z</Created> <Company>chinalife</Company> <Version>11.6568</Version> </DocumentProperties> <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> <WindowHeight>9120</WindowHeight> <WindowWidth>14955</WindowWidth> <WindowTopX>120</WindowTopX> <WindowTopY>120</WindowTopY> <ProtectStructure>False</ProtectStructure> <ProtectWindows>False</ProtectWindows> </ExcelWorkbook> <Worksheet ss:Name="Sheet1"> <Table> END; if (mysql_connect2()){ if (isset($_REQUEST["database"]) && $_REQUEST["database"]!='') mysql_select_db($_REQUEST["database"]); $statement=stripslashes(trim($_REQUEST["statement"])); $sql_str=$statement; //取语句类型 list($sql_type)=explode(' ',$sql_str); $sql_type=strtoupper($sql_type); $res_id = mysql_query($sql_str); if ($res_id){ switch ($sql_type){ case 'DESCRIBE': case 'EXPLAIN': case 'SHOW': case 'SELECT': /* $head_str.= "找到 ".mysql_num_rows($res_id)." 条记录。"; $sql_str=htmlspecialchars($statement); echo <<<END <Row ss:Hidden="1"> <Cell><Data ss:Type="String">$sql_str</Data></Cell> </Row> <Row ss:Hidden="1"> <Cell><Data ss:Type="String">$head_str</Data></Cell> </Row> END; */ $i=1; if (isset($_REQUEST["header"])) { echo "<Row>/n"; $head_str=$_REQUEST["header"]; foreach (explode('|',$head_str) as $head_str) echo '<Cell><Data ss:Type="String">'.htmlspecialchars($head_str)."</Data></Cell>/n"; echo "</Row>/n"; $i++; } while ($row=mysql_fetch_array($res_id,MYSQL_ASSOC)){ if ($i==1){ echo " <Row>/n"; while (list ($key, $val) = each ($row)) { echo " <Cell><Data ss:Type=/"String/">$key</Data></Cell>/n"; } echo " </Row>/n"; reset($row); } echo " <Row>/n"; while (list ($key, $val) = each ($row)) { $val=htmlspecialchars($val); echo " <Cell><Data ss:Type=/"String/">$val</Data></Cell>/n"; } echo " </Row>/n"; if ($i>=500){ $tail_str.='返回数据太多了,请修改条件再查询。'; break; } $i++; } mysql_free_result($res_id); break; case 'DELETE': echo mysql_affected_rows().' 行数据被删除!'; break; case 'UPDATE': echo mysql_affected_rows()." 行数据被更新!"; break; case 'INSERT': echo mysql_affected_rows()." 行数据被插入!"; break; default: break; } }else $tail_str.= "执行语句 $statement 失败,错误信息:".mysql_error(); mysql_close(); }else $tail_str.= '数据库连接失败!'; //输出表尾 echo <<<END <Row> <Cell><Data ss:Type="String">$tail_str</Data></Cell> </Row> </Table> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <Selected/> <Panes> <Pane> <Number>3</Number> <ActiveRow>0</ActiveRow> <ActiveCol>0</ActiveCol> </Pane> </Panes> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> <Worksheet ss:Name="Sheet2"> <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> <Worksheet ss:Name="Sheet3"> <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> </Workbook> END; } ?> |
相关文章推荐
- PHP 从数据库Mysql中读取数据生成excel(解决乱码问题,解决中文变问号问题)
- PHP 从数据库Mysql中读取数据生成excel(解决乱码问题,解决中文变问号问题)
- PHP导出数据表数据生成Excel表格文件
- php将mysql数据表(含中文数据)导出生成excel表,快速生成且解决中文乱码问题。
- PHPExcel 读取文字+图片,保存数据,储存图片的例子
- php读取excel日期类型数据的例子
- 一个php中的数据输出到excel的例子(database:PostgreSQL)
- PHP将操作数据库得到的数据生成Excel导出
- php用PHPExcel库生成Excel文档的例子
- PHP实现实时生成并下载超大数据量的EXCEL文件详解
- Excel 数据导入SQL XML 自动生成表头
- phpexcel导出数据,用数组遍历导出表头
- [置顶] 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题
- Excel调用已有数据利用已经录入的项快速的生成下拉列表
- Struts结合数据实时生成Excel文件并直接下载
- php根据数据id自动生成编号
- php导出excel格式数据问题
- PHP生成和获取XML格式数据
- 一个小例子集合xlrd,matplotlib,numpy,scipy使用方法(从Excel导入数据)
- phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护