Model_excelnew.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. class Model_excelnew extends Lin_Model {
  3. private $objSheet ;
  4. function __construct(){
  5. parent::__construct();
  6. }
  7. public function doHeadMerg($titlename,$filename,$header,$list_data){
  8. libxml_use_internal_errors(true);
  9. require_once "./data/excel/PHPExcel/IOFactory.php";
  10. $objPHPExcel = new PHPExcel();
  11. $objSheet = $objPHPExcel->getActiveSheet();
  12. $objSheet->getDefaultStyle()->getNumberFormat()->setFormatCode('@');
  13. $columns = range('A', 'Z'); // 支持最多26列:ml-citation{ref="7" data="citationList"}
  14. $columnIndex = 0;
  15. $end_column_title = "A";
  16. // 设置表头内容
  17. $header_title_name = [];
  18. foreach ($header as $fieldName) {
  19. $end_column_title = $column = $columns[$columnIndex];
  20. $objSheet->setCellValue($column . '1', $fieldName['title']);
  21. $columnIndex++;
  22. $header_title_name[] = $end_column_title;
  23. }
  24. // 合并主标题
  25. $objSheet->mergeCells('A1:'.$end_column_title.'1');
  26. $objSheet->setCellValue('A1', $titlename);
  27. // 主标题样式
  28. $mainHeaderStyle = [
  29. 'font' => ['bold' => true, 'size' => 16],
  30. 'alignment' => ['horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER]
  31. ];
  32. $objSheet->getStyle('A1:D1')->applyFromArray($mainHeaderStyle);
  33. // 子表头
  34. $objSheet->fromArray($header_title_name, null, 'A2');
  35. // 子表头样式
  36. $subHeaderStyle = [
  37. 'font' => ['bold' => true, 'color' => ['rgb' => '4F81BD']],
  38. 'fill' => [
  39. 'type' => PHPExcel_Style_Fill::FILL_SOLID,
  40. 'color' => ['rgb' => 'DCE6F1']
  41. ]
  42. ];
  43. $objSheet->getStyle('A2:'.$end_column_title.'2')->applyFromArray($subHeaderStyle);
  44. // 设置所有列自适应宽度
  45. foreach ($header_title_name as $k=>$col) {
  46. if(empty($header[$k])){
  47. $objSheet->getColumnDimension($col)->setAutoSize(true); // 自动调整:ml-citation{ref="1,5" data="citationList"}
  48. }else{
  49. if($header[$k]['width'] == 0){
  50. $objSheet->getColumnDimension($col)->setAutoSize(true); // 自动调整:ml-citation{ref="1,5" data="citationList"}
  51. }else{
  52. $objSheet->getColumnDimension($col)->setWidth($header[$k]['width']); // 自动调整:ml-citation{ref="1,5" data="citationList"}
  53. }
  54. }
  55. }
  56. // // 设置列宽
  57. // $objSheet->getColumnDimension('A')->setWidth(12); // 固定宽度
  58. // $objSheet->getColumnDimension('B')->setAutoSize(true); // 自动宽度
  59. // $objSheet->getColumnDimension('C')->setWidth(20);
  60. // $objSheet->getColumnDimension('D')->setWidth(18);
  61. // 从第二行开始写入数据
  62. $rowIndex = 3;
  63. $objSheet->fromArray($list_data, null, 'A3');
  64. // // 强制设置手机号为文本格式(避免科学计数法)
  65. // $objSheet->getStyle('A3:A'.$rowIndex)
  66. // ->getNumberFormat()
  67. // ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  68. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  69. header('Content-Disposition: attachment;filename="'.$filename.'.xlsx"');
  70. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  71. $objWriter->save('php://output');
  72. }
  73. public function doExcel($header,$list){
  74. libxml_use_internal_errors(true);
  75. require_once "./data/excel/PHPExcel/IOFactory.php";
  76. $objPHPExcel = new PHPExcel();
  77. $objSheet = $objPHPExcel->getActiveSheet();
  78. $columns = range('A', 'Z'); // 支持最多26列:ml-citation{ref="7" data="citationList"}
  79. $columnIndex = 0;
  80. // 设置表头内容
  81. foreach ($header as $fieldName) {
  82. $column = $columns[$columnIndex];
  83. $objSheet->setCellValue($column . '1', $fieldName);//自定义宽度
  84. $columnIndex++;
  85. }
  86. //自定义宽度
  87. foreach ($header as $fieldName) {
  88. $column = $columns[$columnIndex];
  89. $objSheet->setCellValue($column . '1', $fieldName);//自定义宽度
  90. $columnIndex++;
  91. }
  92. //$objSheet->getColumnDimension('D')->setAutoSize(true);
  93. // 设置HTTP头直接下载文件
  94. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  95. header('Content-Disposition: attachment;filename="user_export.xlsx"');
  96. header('Cache-Control: max-age=0');
  97. // 生成Excel文件并输出到浏览器
  98. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  99. $objWriter->save('php://output');
  100. exit;
  101. }
  102. private function setHeader($header){
  103. }
  104. // public function setExcel($header,$list){
  105. // libxml_use_internal_errors(true);
  106. // require_once "./data/excel/PHPExcel/IOFactory.php";
  107. // $objPHPExcel = new PHPExcel();
  108. // $objPHPExcel->getProperties()->setTitle("export")->setDescription("none");
  109. // $objPHPExcel->setActiveSheetIndex(0);// 创建PHPExcel对象
  110. // $objPHPExcel = new PHPExcel();
  111. // // 设置文档属性
  112. // $objPHPExcel->getProperties()
  113. // ->setCreator("Admin") // 创建者
  114. // ->setLastModifiedBy("Admin") // 最后修改者
  115. // ->setTitle("用户数据导出") // 标题
  116. // ->setSubject("用户信息"); // 主题
  117. // // 操作第一个工作表
  118. // $objSheet = $objPHPExcel->setActiveSheetIndex(0);
  119. // $objSheet->setTitle('用户列表'); // 工作表名称
  120. // // 设置表头
  121. // $objSheet->setCellValue('A1', '用户ID')
  122. // ->setCellValue('B1', '姓名')
  123. // ->setCellValue('C1', '手机号')
  124. // ->setCellValue('D1', '注册时间');
  125. // // 模拟数据填充(示例数据)
  126. // $data = [
  127. // [1001, '张三', '13800138000', '2025-01-01'],
  128. // [1002, '李四', '13912345678', '2025-02-15']
  129. // ];
  130. // // 从第二行开始写入数据
  131. // $rowIndex = 2;
  132. // foreach ($data as $row) {
  133. // $objSheet->setCellValue('A'.$rowIndex, $row[0])
  134. // ->setCellValue('B'.$rowIndex, $row[1])
  135. // ->setCellValue('C'.$rowIndex, $row[2])
  136. // ->setCellValue('D'.$rowIndex, $row[3]);
  137. // $rowIndex++;
  138. // }
  139. // // 强制设置手机号为文本格式(避免科学计数法)
  140. // $objSheet->getStyle('C2:C'.$rowIndex)
  141. // ->getNumberFormat()
  142. // ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  143. // // 设置HTTP头直接下载文件
  144. // header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  145. // header('Content-Disposition: attachment;filename="user_export.xlsx"');
  146. // header('Cache-Control: max-age=0');
  147. // // 生成Excel文件并输出到浏览器
  148. // $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  149. // $objWriter->save('php://output');
  150. // exit;
  151. // }
  152. public function demo(){
  153. // 创建PHPExcel对象
  154. $objPHPExcel = new PHPExcel();
  155. // 设置文档属性
  156. $objPHPExcel->getProperties()
  157. ->setCreator("Admin") // 创建者
  158. ->setLastModifiedBy("Admin") // 最后修改者
  159. ->setTitle("用户数据导出") // 标题
  160. ->setSubject("用户信息"); // 主题
  161. // 操作第一个工作表
  162. $objSheet = $objPHPExcel->setActiveSheetIndex(0);
  163. $objSheet->setTitle('用户列表'); // 工作表名称
  164. // 设置表头
  165. $objSheet->setCellValue('A1', '用户ID')
  166. ->setCellValue('B1', '姓名')
  167. ->setCellValue('C1', '手机号')
  168. ->setCellValue('D1', '注册时间');
  169. // 模拟数据填充(示例数据)
  170. $data = [
  171. [1001, '张三', '13800138000', '2025-01-01'],
  172. [1002, '李四', '13912345678', '2025-02-15']
  173. ];
  174. // 从第二行开始写入数据
  175. $rowIndex = 2;
  176. foreach ($data as $row) {
  177. $objSheet->setCellValue('A'.$rowIndex, $row[0])
  178. ->setCellValue('B'.$rowIndex, $row[1])
  179. ->setCellValue('C'.$rowIndex, $row[2])
  180. ->setCellValue('D'.$rowIndex, $row[3]);
  181. $rowIndex++;
  182. }
  183. // 强制设置手机号为文本格式(避免科学计数法)
  184. $objSheet->getStyle('C2:C'.$rowIndex)
  185. ->getNumberFormat()
  186. ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  187. // 设置HTTP头直接下载文件
  188. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  189. header('Content-Disposition: attachment;filename="user_export.xlsx"');
  190. header('Cache-Control: max-age=0');
  191. // 生成Excel文件并输出到浏览器
  192. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  193. $objWriter->save('php://output');
  194. exit;
  195. }
  196. }