php生成excel文件源代码

  1. class excel{
  2. /**
  3. *头的excel文件(前缀的行)
  4. *
  5. *从excel复制的xml规格。
  6. *
  7. * @访问私有
  8. * @无功串
  9. */
  10. var $header = "<?xml version="1.0" encoding="utf-8"?>
  11. <workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  12. xmlns:x="urn:schemas-microsoft-com:office:excel"
  13. xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  14. xmlns:html="http://www.w3.org/tr/rec-html40">";
  15. /**
  16. *页脚的excel文件(附加到行)
  17. *
  18. *从excel复制的xml规格。
  19. *
  20. * @访问私有
  21. * @无功串
  22. */
  23. var $footer = "</workbook>";
  24. /**
  25. * document lines (rows in an array)
  26. *
  27. * @access private
  28. * @var array
  29. */
  30. var $lines = array ();
  31. /**
  32. 工作表名称
  33. *
  34. *包含一个单一的工作表名称
  35. *
  36. * @访问私有
  37. * @无功串
  38. */
  39. var $worksheet_title = "table1";
  40. /**
  41. 添加一个单行的文档字符串$
  42. *
  43. * @访问私有
  44. * @帕拉姆库马拉阵列一维阵列
  45. * @待办事项行创造应做减本-> addarray
  46. */
  47. function addrow ($array) {
  48. // initialize all cells for this row
  49. $cells = "";
  50. // foreach key -> write value into cells
  51. foreach ($array as $k => $v):
  52. // 加个字符串与数字的判断 避免生成的 excel 出现数字以字符串存储的警告
  53. if(is_numeric($v)) {
  54. // 防止首字母为 0 时生成 excel 后 0 丢失
  55. if(substr($v, 0, 1) == 0) {
  56. $cells .= "<cell><data ss:type="string">" . $v . "</data></cell> ";
  57. } else {
  58. $cells .= "<cell><data ss:type="number">" . $v . "</data></cell> ";
  59. }
  60. } else {
  61. $cells .= "<cell><data ss:type="string">" . $v . "</data></cell> ";
  62. }
  63. endforeach;
  64. // transform $cells content into one row
  65. $this->lines[] = "<row> " . $cells . "</row> ";
  66. }
  67. /**
  68. *添加一个数组到文档
  69. *
  70. *这应该是唯一的方法需要生成一个excel
  71. *文件。
  72. *
  73. * @访问公开
  74. * @帕拉姆库马拉数组二维数组
  75. * @待办事项可以转移到__construct()稍后
  76. */
  77. function addarray ($array) {
  78. // run through the array and add them into rows
  79. foreach ($array as $k => $v):
  80. $this->addrow ($v);
  81. endforeach;
  82. }
  83. /**
  84. 设置工作表名称
  85. *
  86. *检查的字符串不允许字符(: /?*),
  87. *削减它的最大31个字符,并设置标题。该死
  88. *为何未允许字符无处可寻?视窗
  89. *帮助没有帮助...
  90. *
  91. * @访问公开
  92. * @帕拉姆库马拉字符串$标题设计标题
  93. */
  94. function setworksheettitle ($title) {
  95. // strip out special chars first
  96. $title = preg_replace ("/[\|:|/|?|*|[|]]/", "", $title);
  97. // now cut it to the allowed length
  98. $title = substr ($title, 0, 31);
  99. // set title
  100. $this->worksheet_title = $title;
  101. }
  102. /**
  103. *生成excel文件
  104. *
  105. *最后生成的excel文件,并使用header()函数
  106. *提供给浏览器。
  107. *
  108. * @访问公开
  109. * @帕拉姆库马拉字符串$文件名名称的excel文件来生成(... xls)中
  110. */
  111. function generatexml ($filename) {
  112. // deliver header (as recommended in php manual)
  113. header("content-type: application/vnd.ms-excel; charset=utf-8");
  114. header("content-disposition: inline; filename="" . $filename . ".xls"");
  115. // print out document to the browser
  116. // need to use strips教程lashes for the damn ">"
  117. echo stripslashes ($this->header);
  118. echo " <worksheet ss:name="" . $this->worksheet_title . ""> <table> ";//开源代码phpfensi.com
  119. echo "<column ss:index="1" ss:autofitwidth="0" ss:width="110"/> ";
  120. echo implode (" ", $this->lines);
  121. echo "</table> </worksheet> ";
  122. echo $this->footer;
  123. }
  124. }

cakephp中使用方法

注意:cakephp 配置文件 define('debug', 0);

  1. vendor ('excel');
  2. $doc = array (
  3. 0 => array ('中国', '中国人', '中国人民', '123456');
  4. );
  5. $xls = new excel;
  6. $xls->addarray ( $doc );
  7. $xls->generatexml ("mytest");

非框架使用方法,实例代码如下:

  1. require_once('excel.php');
  2. $doc = array (
  3. 0 => array ('中国', '中国人', '中国人民', '123456');
  4. );
  5. $xls = new excel;
  6. $xls->addarray ( $doc );
  7. $xls->generatexml ("mytest");