Model_excelnew.php 8.7 KB

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