1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>ERP商品代码生成</title>
  8. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  9. <style type="text/css">
  10. .mt16 {margin-top: 12px;}
  11. </style>
  12. </head>
  13. <body>
  14.  
  15. <div class="container">
  16. <div class="row">
  17. <div class="col-lg-6">
  18. <div class="input-group mt16">
  19. <span class="input-group-addon">商品代码</span>
  20. <input type="text" name="scode" class="form-control" placeholder="商品代码,如BM111WY">
  21. </div>
  22. </div>
  23. <div class="col-lg-6">
  24. <div class="input-group mt16">
  25. <span class="input-group-addon">商品名称</span>
  26. <input type="text" name="sname" class="form-control" placeholder="商品名称及商品简称">
  27. </div>
  28. </div>
  29. </div>
  30.  
  31. <div class="row">
  32. <div class="col-lg-6">
  33. <div class="input-group mt16">
  34. <span class="input-group-addon">规格代码</span>
  35. <input type="text" name="specode" class="form-control" placeholder="规格代码,如BM111WY01S">
  36. </div>
  37. </div>
  38. <div class="col-lg-6">
  39. <div class="input-group mt16">
  40. <span class="input-group-addon">规格名称</span>
  41. <input type="text" name="spename" class="form-control" placeholder="规格名称,如XX卫衣 白色 S">
  42. </div>
  43. </div>
  44. </div>
  45.  
  46. <div class="input-group mt16">
  47. <span class="input-group-addon">颜色</span>
  48. <input type="text" name="specolor" class="form-control" placeholder="颜色,以空格隔开,如白色 红色 黑色">
  49. </div>
  50.  
  51. <div class="input-group mt16">
  52. <span class="input-group-addon">颜色对应的编号</span>
  53. <input type="text" name="specolorid" class="form-control" placeholder="颜色编号,以空格隔开,如01 16 05">
  54. </div>
  55.  
  56. <div class="input-group mt16">
  57. <span class="input-group-addon">尺码</span>
  58. <input type="text" name="spesize" class="form-control" placeholder="尺码,以空格隔开,如S M L XL XXL">
  59. </div>
  60.  
  61. <button type="button" class="btn btn-success btn-block mt16">确定提交</button>
  62.  
  63. <table class="table table-bordered mt16">
  64. <thead>
  65. <tr>
  66. <th>商品代码</th>
  67. <th>规格代码</th>
  68. <th>规格名称</th>
  69. <th>商品名称</th>
  70. <th>商品简称</th>
  71. </tr>
  72. </thead>
  73. <tbody>
  74. </tbody>
  75. </table>
  76.  
  77. <div class="text-center mt16">Powered by 李佳,2019.9</div>
  78.  
  79. </div>
  80.  
  81. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  82. <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  83.  
  84. <script type="text/javascript">
  85. var shoparr = [];
  86.  
  87. $(":button").click(function(){
  88. var scode = $("input[name='scode']").val();
  89. var sname = $("input[name='sname']").val();
  90. var specode = $("input[name='specode']").val();
  91. var spename = $("input[name='spename']").val();
  92. var specolor = $("input[name='specolor']").val();
  93. var specolorid = $("input[name='specolorid']").val();
  94. var spesize = $("input[name='spesize']").val();
  95.  
  96. //颜色数组
  97. var specolorarr = specolor.split(/\s+/g);
  98. //颜色编号数组
  99. var specoloridarr = specolorid.split(/\s+/g);
  100. //尺码数组
  101. var spesizearr = spesize.split(/\s+/g);
  102.  
  103. //清空表格
  104. $("table tbody").empty();
  105.  
  106. for (var i = 0; i < specolorarr.length; i++) {
  107. for (var j = 0; j < spesizearr.length; j++) {
  108. shoparr.push([scode,specode+specoloridarr[i]+spesizearr[j],spename+" "+specolorarr[i]+spesizearr[j],sname]);
  109. $("table tbody").append("<tr><td>"+scode+"</td><td>"+specode+specoloridarr[i]+spesizearr[j]+"</td><td>"+spename+" "+specolorarr[i]+spesizearr[j]+"</td><td>"+sname+"</td><td>"+sname+"</td></tr>");
  110. }
  111. }
  112.  
  113. if (shoparr.length>1 && $("button").length<2) {
  114. $("table").after("<button type='button' class='btn btn-success btn-block mt16' id='getxls'>下载表格</button>");
  115. }
  116. });
  117.  
  118. $("body").on('click','#getxls',function(){
  119. DownLoadFile({
  120. url:'{:getHostDomain()}{:addonUrl('arr2xls')}',
  121. data:{sparr:shoparr}
  122. });
  123. });
  124.  
  125. var DownLoadFile = function (options) {
  126. var config = $.extend(true, { method: 'post' }, options);
  127. var $iframe = $('<iframe id="down-file-iframe" />');
  128. var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
  129. $form.attr('action', config.url);
  130. for (var key in config.data) {
  131. $form.append('<input type="hidden" name="' + key + '" value="' + config.data[key] + '" />');
  132. }
  133. $iframe.append($form);
  134. $(document.body).append($iframe);
  135. $form[0].submit();
  136. $iframe.remove();
  137. }
  138.  
  139. </script>
  140.  
  141. </body>
  142. </html>

前端提交数组,由于通过AJAX提交返回的只能是字符串,不能流类型,所以这里临时构建一个Iframe,通过iframe提交form,然后删除临时Iframe,实现流文件接收。

这里是在 thinkphp里 引入类

  1. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  2. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

处理函数

  1. //由数组生成表格文件
  2. public function arr2xls(){
  3. $sparr = input('post.sparr');
  4. $sparr = explode(',',$sparr);
  5. $sp2arr = array_chunk($sparr,4);
  6.  
  7. //创建表格
  8. //$spreadsheet = new Spreadsheet();
  9. //通过模板生成表格
  10. $inputFileName = ADDON_PATH.'webact/static/SpMoban.xlsx';
  11. $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
  12.  
  13. $sheet = $spreadsheet->getActiveSheet();
  14.  
  15. //设置第一行小标题
  16. // $k = 1;
  17. // $sheet->setCellValue('A'.$k, '商品代码(必填)');
  18. // $sheet->setCellValue('B'.$k, '规格代码');
  19. // $sheet->setCellValue('C'.$k, '规格名称');
  20. // $sheet->setCellValue('D'.$k, '商品名称');
  21. // $sheet->setCellValue('E'.$k, '商品简称');
  22.  
  23. for ($i=0; $i < count($sp2arr); $i++) {
  24. $sheet->setCellValue('A'.($i+2), $sp2arr[$i][0]);
  25. $sheet->setCellValue('B'.($i+2), $sp2arr[$i][1]);
  26. $sheet->setCellValue('C'.($i+2), $sp2arr[$i][2]);
  27. $sheet->setCellValue('D'.($i+2), $sp2arr[$i][3]);
  28. $sheet->setCellValue('E'.($i+2), $sp2arr[$i][3]);
  29. }
  30. //设置列宽
  31. $spreadsheet->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
  32. $spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  33. $spreadsheet->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
  34. $spreadsheet->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
  35. $spreadsheet->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
  36.  
  37. header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//告诉浏览器输出07Excel文件
  38. header("Content-Disposition: attachment;filename=".$sp2arr[0][0].".xlsx");//告诉浏览器输出浏览器名称
  39. header("Cache-Control: max-age=0");//禁止缓存
  40.  
  41. $writer = new Xlsx($spreadsheet);
  42. //$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'xlsx');
  43. $writer->save('php://output');
  44. }

PhpSpreadsheet处理表格2的更多相关文章

  1. PhpSpreadsheet处理表格

    介绍:PhpSpreadsheet是PHPExcel的下一个版本.它打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等).由于所有努力都转移到了PhpSpreads ...

  2. phpspreadsheet导出数据到Excel

    之前我们使用PHP导出Excel数据时使用的是PHPExcel库,但是phpoffice已经官方宣布PHPExcel已经被废弃不在维护,推荐使用phpspreadsheet,如下图所示 我们可以通过c ...

  3. PHP7 学习笔记(十二)PHPExcel vs PhpSpreadsheet and PHP_XLSXWriter

    前言 PhpSpreadsheet是PHPExcel的下一个版本. 它打破了兼容性,极大地提高了代码库的质量(命名空间,PSR合规性,使用最新的PHP语言功能等).由于所有努力都转移到了PhpSpre ...

  4. php+phpspreadsheet读取Excel数据存入mysql

    先生成Excel模板,然后导入Excel数据到mysql,每条数据对应图片上传到阿里云 <?php /** * Created by PhpStorm. * User: Administrato ...

  5. 详解PhpSpreadsheet设置单元格

    PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式.图片.日期.函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到. 在 ...

  6. 使用PhpSpreadsheet将Excel导入到MySQL数据库

    本文以导入学生成绩表为例,给大家讲解使用PhpSpreadsheet将Excel导入的MySQL数据库. 准备 首先我们需要准备一张MySQL表,表名t_student,表结构如下: CREATE T ...

  7. TP5使用Composer安装phpoffice/phpspreadsheet,导出Excel文件

    1.composer安装: composer require phpoffice/phpspreadsheet 2.点击导出按钮,触发控制器里面的方法 wdjzdc() 3. 在控制中引入 use P ...

  8. phpspreadsheet开发手记

    坑安装简单示例通过模板来生成文件释放内存单元格根据索引获取英文列设置值合并单元格居中显示宽度设置批量设置单元格格式直接输出下载自动计算列宽函数formula单元格变可点击的超链 PhpSpreadsh ...

  9. PhpSpreadsheet如何读取excel文件

    PhpSpreadsheet如何读取excel文件 一.总结 一句话总结:万能的百度,直接搜代码就好,绝对有,毕竟github上面4000+的关注,说明很多人用了这个,使用照着demo倒是异常简单 二 ...

随机推荐

  1. redis深入学习(二)-----redis配置文件、持久化

    redis配置文件 地址 units单位 a  配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bitb  对大小写不敏感 GENERAL通用 1.daemonize 2.pidf ...

  2. 6月份Github上最热门的Java开源项目!

    1.halo 这是一个轻快,简洁,功能强大,使用Java开发的博客系统. 项目地址:https://github.com/halo-dev/halo   Star 6139 2.jeecg-boot ...

  3. 深入理解JVM之类加载

    ---title: [学习]深入理解JVM之类加载.mddate: 2019-10-20 22:20:06tags: JVM 类加载--- Java类的加载,连接,初始化都是在程序运行期间执行的 ## ...

  4. angular 基本树结构

    HTML: http://www.ngnice.com/showcase/#/tree/basic <link rel="stylesheet" href="vie ...

  5. spark生态圈简介

    原文引自:http://www.cnblogs.com/shishanyuan/p/4700615.html 1.简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algori ...

  6. 08.Hibernate的一级缓存-->>Session

    Hibernate提供了两种缓存: 1.一级缓存:自带的不可卸载的,一级缓存的生命周期与Session一致,一级缓存成为Session级别的缓存 2.二级缓存:默认没有开启,需要手动配置才可以使用,二 ...

  7. spring中关于<context:component-scan>的使用说明

    通常情况下我们在创建spring项目的时候在xml配置文件中都会配置这个标签,配置完这个标签后,spring就会去自动扫描base-package对应的路径或者该路径的子包下面的java文件,如果扫描 ...

  8. hadoop2.2 window下报错的问题(winutils.exe)

    在windows下开发hadoop一直正常,但把hadoop集群升级到2.0版本以上,在eclipse下执行程序会报打不到winutils.exe的错误,这是因为hadoop2.2没有发布winuti ...

  9. 查看cpu性能和磁盘空间

    df -h查看当前磁盘空间 du -sh查看当前目录占用的磁盘空间 du -sh * 查看当前所有目录占用的磁盘空间   lscpu查看cpu信息 free查看空间总量

  10. http://codeforces.com/gym/100623/attachments H题

    http://codeforces.com/gym/100623/attachments H题已经给出来的,包括后来添加的,都累加得到ans,那么从1-ans都是可以凑出来的,如果ans<a[n ...