精华内容
下载资源
问答
  • 在做项目的过程中将表格数据导出excel保存起来这个功能基本上在桌面项目中都会被用到,网上写的例子也很多,我一开始也是参考的网上的代码。大部分人的做法是实例化一个Microsoft.Office.Interop.Excel....

      在做项目的过程中将表格数据导出到excel保存起来这个功能基本上在桌面项目中都会被用到,网上写的例子也很多,我一开始也是参考的网上的代码。大部分人的做法是实例化一个Microsoft.Office.Interop.Excel.Application对象,然后再增加worksheet对象,然后往里头写入数据,这样相当于打开了一个excel,将保存的工作完全交给了用户,效果如图,

    相应代码如下:

    //实例化一个Excel.Application对象 
                        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                        excel.Visible = true;//设置为可见
                        //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错 
                        excel.Application.Workbooks.Add(true);
                        //excel.Application.Workbooks.Application.AddChartAutoFormat
                        //生成Excel中列头名称 
                        excel.Cells[1, 1] = "列1";
                        excel.Cells[1, 2] = "列2";
                        excel.Cells[1, 3] = "列3";
                        excel.Cells[1, 4] = "列4";
    
                        //把datatable的数据保存在Excel中 data是一个DataTable
                        for (int i = 0; i <data.Count ; i++)
                        {
                            for(int j=0;j<4;j++)
                            {
                                 excel.Cells[i+2,j+1]=data.Rows[i][j];
                             }
                            
                        }
                        //excel.Save(saveFile);
                        //设置禁止弹出保存和覆盖的询问提示框 
                        //excel.DisplayAlerts = false;
                        //excel.AlertBeforeOverwriting = false;
                        excel.Quit();
                        excel = null;

      这种方式简单,而且不需要考虑用户机器上安装的office版本问题,将处理都交给了用户,相当于用户新建了一个拥有数据的excel。但是这些有点都是站在开发者方面来说,从用户体验上来说不太好,一是突兀,突然就在用户面前打开了一个全屏的excel而且,还能看到哗哗的写入数据过程,这个过程应该被屏蔽的,第二点是无法指定默认的保存文件名,还得用户修改文件名才保存。

      那我们就可以改进一下,先用SaveFileDialog指定保存的文件名,并且得到保存后的文件完整的路径,然后将excel对象设为不可见,并调用excel对象的SaveAs方法保存后再用

    excel.Quit()退出即可,这样就可以以一个用户看不见的过程完成导出数据到Excel。但是我在实施的时候又出现另外一个问题,就是这样的话保存的Excel是跟用户机器安装的Excel版本是一样的,比如我装的是2010,但是我用SaveFileDialog时却是用的.xls作为后缀,这样保存的时候成功了,当我打开时却提示我格式与内容不一致,当然也可以强行打开,但是显然这样会让用户以为有问题。

      难不成还要先判断用户安装的是什么版本的Excel,再来指定后缀名,查了一下,相当麻烦,得去注册表查,当然可能是我没找到简单的办法,不管怎样我决定换个思路了。之前因为是Microsoft.Office.Interop.Excel.Application是new出来的,内容自然是与调用的dll有关,但是如果我用Open方法打开一个03版的excel,那内容格式肯定是03版的了,相当于用Excel 2010打开一个xls后缀的文件,修改后再另存为,再关闭excel退出,过程类似,就可以实现我们指定文件名了。完整的方法如下,包括了指定sheet的名字。

         /// <summary>
            ///  将datatable导出到excel 03版的  通过模板控制导出的为03版 即xls后缀的
            /// </summary>
            /// <param name="data">datatable</param>
            /// <param name="headers">表头名称</param>
            /// <param name="sheetName">sheet的名称</param>
            /// <param name="savePath">保存路径</param>
            /// <returns></returns>
             public static bool Datatable2Xls(DataTable data,List<string> headers,string sheetName ,string savePath)
             {
                 try
                 {
                     //dev 的gridcontrol的这个方法在我的开发电脑上可以  但是装到别的电脑上就不行了 诡异
                     //DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions(true);
                     //gridControl1.ExportToXls(sfd.FileName, options);
                     //实例化一个Excel.Application对象 
                     Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                     excel.Visible = false;
                     string source = Application.StartupPath + @"\data\template.xls";
                     //打开空白模版工作簿 模版为2003版的 如果是直接new的话会根据客户机上安装的excel版本来增加  这样导致了不确定性
                     Microsoft.Office.Interop.Excel._Workbook workbook = excel.Application.Workbooks.Open(source, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                     // creating new Excelsheet in workbook
                     Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
                     // store its reference to worksheet
                     worksheet = workbook.ActiveSheet as Microsoft.Office.Interop.Excel._Worksheet;
                     if (sheetName != null && sheetName.Length > 0)
                     {
                         worksheet.Name = sheetName;
                     }
                     int rowStart = 1;//数据行起始位置
                     if (headers != null && headers.Count > 0)
                     {
                         for (int i = 0; i < headers.Count; i++)
                         {
                             excel.Cells[1, i + 1] = headers[i];
                         }
                         rowStart = 2;
                     }
    
                     //把DataTable的数据保存在Excel中 
                     for (int i = 0; i < data.Rows.Count ; i++)
                     {
                         for (int j = 0; j < data.Columns.Count; j++)
                         {
                             excel.Cells[i + rowStart, j + 1] = data.Rows[i][j].ToString();
                         }
                     }
                     excel.DisplayAlerts = false;
                     //设置禁止弹出保存和覆盖的询问提示框 
                     excel.AlertBeforeOverwriting = false;
                     // save the application
                     workbook.SaveAs(savePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                     excel.Quit();
                     excel = null;
                     return true;
                 }
                 catch (Exception ex)
                 {
                     Trace.WriteLine(ex);
                     return false;
                 }
             }

     

     
    

    转载于:https://www.cnblogs.com/ValiancyHe/archive/2013/05/06/3062280.html

    展开全文
  • //将文件名解析成中文后拼接文件路径 // 以流的形式下载文件。 File file = new File(path); try { // 清空response response.reset(); // 设置response的Header String fileName = file....

    乱码原因:超链接中含有中文参数,提交到后台会乱码;

    解决思路:将这个参数转成 unicode 编码,再传到后台,到后台再将参数解析成中文。

    前台:

    //文件路径

    var path = 'E:/cathy_jcy/default_upload_dir/excel/付款申请_20170426.xlsx';

    var pathArrayStr = path.split("/"); 
    path = path.substring(0,path.lastIndexOf("/"));//path = 'E:/cathy_jcy/default_upload_dir/excel'

    //文件名转成unicode编码
    var fileName = cathy.encodeUnicode(pathArrayStr[pathArrayStr.length-1]);

    //连接拼接

    var url = "localhost:8080/xxx/downFileController/download?filePath="+path+"&fileName="+fileName;

     /**中文转Unicode**/
      cathy.encodeUnicode = function (str) {  
       var res = [];  
       for ( var i=0; i<str.length; i++ ) {  
       res[i] = ( "00" + str.charCodeAt(i).toString(16) ).slice(-4);  
       }  
       return "\\u" + res.join("\\u");  

    后台:


    /**
    * 下载文件

    * @param request
    * @param response
     */

    @RequestMapping(value = "/download", method = RequestMethod.GET)
    @ResponseBody

    public String download(HttpServletRequest request,HttpServletResponse response) {

    String filePath = request.getParameter("filePath");


    String urlFileName = request.getParameter("fileName");

    String path = filePath;

    path = path+"/"+this.convertUnicode(urlFileName);//将文件名解析成中文后拼接文件路径
    // 以流的形式下载文件。
    File file = new File(path);

    try {
    // 清空response
    response.reset();
    // 设置response的Header
    String fileName = file.getName();
    String agent = (String)req.getHeader("USER-AGENT");     
    if(agent != null && agent.indexOf("Firefox") != -1) {
    // firefox      
    fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
    }else{
    // others
    fileName = URLEncoder.encode(file.getName(), "UTF-8");
    }
    response.addHeader("Content-Disposition", "attachment;filename="+ fileName);
    response.addHeader("Content-Length", ""+ file.length());
    response.setContentType("application/octet-stream");


    InputStream inputStream = new BufferedInputStream(new FileInputStream(path));
    OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
    int length = -1;
    byte[] buffer = new byte[1024 * 1024];
    while((length = inputStream.read(buffer)) != -1) {
    // 读入流, 保存在buffer数组中
                outputStream.write(buffer, 0, length); 
               }
    outputStream.flush();
    outputStream.close();
    inputStream.close();
    }catch (IOException e) {
    e.printStackTrace();
    }

    return null;

    }


    convertUnicode 方法:

     /**

         * Unicode 转中文
         * @param Unicode
         */
        public String convertUnicode(String Unicode){
    char aChar;
            int len = Unicode.length();
            StringBuffer outBuffer = new StringBuffer(len);
            for (int x = 0; x < len;) {
                aChar = Unicode.charAt(x++);
                if (aChar == '\\') {
                    aChar = Unicode.charAt(x++);
                    if (aChar == 'u') {
                        // Read the xxxx
                        int value = 0;
                        for (int i = 0; i < 4; i++) {
                            aChar = Unicode.charAt(x++);
                            switch (aChar) {
                            case '0':
                            case '1':
                            case '2':
                            case '3':
                            case '4':
                            case '5':
                            case '6':
                            case '7':
                            case '8':
                            case '9':
                                value = (value << 4) + aChar - '0';
                                break;
                            case 'a':
                            case 'b':
                            case 'c':
                            case 'd':
                            case 'e':
                            case 'f':
                                value = (value << 4) + 10 + aChar - 'a';
                                break;
                            case 'A':
                            case 'B':
                            case 'C':
                            case 'D':
                            case 'E':
                            case 'F':
                                value = (value << 4) + 10 + aChar - 'A';
                                break;
                            default:
                                throw new IllegalArgumentException(
                                        "Malformed   \\uxxxx   encoding.");
                            }
                        }
                        outBuffer.append((char) value);
                    } else {
                        if (aChar == 't')
                            aChar = '\t';
                        else if (aChar == 'r')
                            aChar = '\r';
                        else if (aChar == 'n')
                            aChar = '\n';
                        else if (aChar == 'f')
                            aChar = '\f';
                        outBuffer.append(aChar);
                    }
                } else
                    outBuffer.append(aChar);
           }
            return outBuffer.toString();
        }

    展开全文
  • python导出excel表利用的是xlwt模块 下面是代码 import os from xlwt import Workbook from info import models def excel_export(): list_obj = models.Tag.objects.all() if list_obj: # 创建工作薄 ws = ...

    python导出excel表利用的是xlwt模块
    学习的网址 大佬教学网址

    导出数据到excel表

    下面是代码

    import os
    from xlwt import Workbook
    from info import models
    
    
    def excel_export():
        list_obj = models.Tag.objects.all()
        if list_obj:
            # 创建工作薄
            ws = Workbook(encoding="UTF-8")
            w = ws.add_sheet(u'数据报表第一页')
            w.write(0, 0, u'项目名')
            w.write(0, 1, u'tag名')
            w.write(0, 2, u'描述')
            w.write(0, 3, u'设备名')
            w.write(0, 4, u'节点名')
            w.write(0, 5, u'端口号')
    
            # 写入数据
            excel_row = 1
            for obj in list_obj:
    
                data_name = obj.t_name
                data_description = obj.t_description
                data_device = obj.t_device_name
                data_node = obj.t_node_name
                data_port = obj.t_portnumber
                data_project = obj.t_project_name
                w.write(excel_row, 0, data_project)
                w.write(excel_row, 1, data_name)
                w.write(excel_row, 2, data_description)
                w.write(excel_row, 3, data_device)
                w.write(excel_row, 4, data_node)
                w.write(excel_row, 5, data_port)
                excel_row += 1
                # 检测文件是否存在
                # 方框中代码是保存本地文件使用,如不需要请删除该代码
            ###########################
    
            ws.save("test.xls")
            ############################
    
    
    excel_export()
    

    效果
    在这里插入图片描述

    导出excel表到目标路径

    尝试了几种方法
    第一种方法 可行 但跳出一个输入框 需要输入数据 不方便

    import tkinter.filedialog
    
    
      filename = tkinter.filedialog.asksaveasfilename(filetypes=[('xlsx', '*.xlsx')], initialdir='C:/Users/zhouxuan/Desktop')                                                                                             
            filename = filename + '.xls'
            ws.save(filename)
    

    第二种方法 可行还方便 本人采用第二种

            ws.save("C:/Users/zhouxuan/Desktop/{}".format("1.xls"))
    
        ws.save("路径+{}".format("filename.xls"))
    

    实现客户端下载

    返回客户端一个url
    url为excel文件保存到写的项目的static中,这样就可以在别的电脑端下载了
    具体代码如下

       a = "static/excel/"  # 文件路径
            date = time.strftime('%Y-%m-%d %H.%M.%S', time.localtime(time.time()))
            # date = date.replace(' ','-')
            # 文件名加时间后缀
            b = "EroAlarmExcel" + " " + date
            ws.save(a + "{}".format(b + ".xls"))
            url = 'http://192.168.0.125:8000/' + a + b + '.xls'
            print(url)
            response = {
                'url': url,
            }
            return HttpResponse(json.dumps(response))
    
    展开全文
  • 实现导出文件时 弹出下载框 主要是 设置成 文件流 stream 类型的response. 浏览器就会识别出 文件下载弹出 下载框。 这里总结三个方式 sturts框架中弹出 详见  java通过struts实现web中的文件下载 其中关键的...



    实现导出文件时 弹出下载框 主要是 设置成 文件流  stream 类型的response. 浏览器就会识别出 文件下载弹出 下载框。


    这里总结三个方式

    web-sturts框架中弹出

    详见  

    java通过struts实现web中的文件下载

    其中关键的设置是

    <struts>        
       <package name="struts2" extends="struts-default">        
           <action name="FileDownload" class="com.struts2.filedownload.FileDownload">  
               <result name="success" type="stream">  
                   <param name="contentType">text/plain</param>  
                   <param name="contentDisposition">attachment;fileName="${fileName}"</param>  
                   <param name="inputName">downloadFile</param>  
                   <param name="bufferSize">1024</param>  
               </result>  
           </action>  
         
       </package>  
         
    </struts>  



    web-SpringMvc等非struts框架中弹出

    在response中设置头

    response.addHeader("Content-Disposition", "attachment;filename="+ new String(filename.getBytes()));  
               OutputStream os= new BufferedOutputStream(response.getOutputStream());  
               response.setContentType("application/vnd.ms-excel;charset=gb2312");  
               os.write(buffer);  
               os.flush();  
               os.close();  

    例如:

    jsp页面 使用js    提交 post  form

        $(document).ready(function() {    
        	var $searchForm = $('#search_form').on('submit',function(){
            	$dt.DataTable().searchEx( {} ).draw();
            	return false;
            }).on('click', 'button.export', function(){ 
            var searchData={};
            searchData.search=$('#search_form').formGet();  
              console.log(searchData);
               post('/order/list/export',searchData);        	
            });
                  
                  
          function post(URL, PARAMS) {        
            var temp = document.createElement("form");        
            temp.action = URL;        
            temp.method = "post";        
            temp.style.display = "none";        
            for (var x in PARAMS.search) {        
               var opt = document.createElement("textarea"); 
               if(x=="id"||x=="expressNumber"||x=="payStatus"){      
                 opt.name = x;        
                 opt.value = PARAMS.search[x];
                 temp.appendChild(opt);  
               }       
            }        
            document.body.appendChild(temp);        
            temp.submit(); 
          }  
    }

    后端接受参数后查询出数据,把生成的excel写入excel,返回文件流

    	@RequestMapping("/list/export")
    	public Object export(@RequestParam String id,@RequestParam  String expressNumber,@RequestParam String payStatus,HttpServletResponse response) {
    		PagerRequest<Map> req=new PagerRequest<Map>();
    		req.setLength(0);
    		req.setOffset(0);
    		HashMap<String, String> search=new HashMap<String, String>();
    		search.put("id", id);
    		search.put("expressNumber", expressNumber);
    		search.put("payStatus", payStatus);
    		req.setSearch(search);
    		List<Order> orders = new ArrayList<Order>();
    		if (req.getSearch() == null||req.getSearch().size()==0) {
    			orders = (List<Order>) orderRepository.findAll();
    		} else {
    			Page<Order> page = orderRepository.listWithSearch(new PageRequest(
    					0,(int) orderRepository.count()), req
    					.getSearch());
    			orders = page.getContent();
    		}
    		if (productService.exportOrders(orders,response)) {
    			return null;
    		}
    		return null; 
    
    	}


    	@Override
    		public boolean exportOrders(List<Order> orders, HttpServletResponse response) {
    			try {
    
    				ArrayList<String[]> contentsArrayList = new ArrayList<String[]>();
    				String[] titles = new String[14];
    				titles[0] = "订单日期";
    				titles[1] = "订单支付日期";
    				titles[2] = "订单编号";
    				titles[3] = "产品名称";
    				titles[4] = "产品类型";
    				titles[5] = "单价";
    				titles[6] = "购买数量";
    				titles[7] = "总金额";
    				titles[8] = "付款状态";
    				titles[9] = "收件人名称";
    				titles[10] = "收件人电话";
    				titles[11] = "配送地址";
    				titles[12] = "配送日期";
    				titles[13] = "发票信息";
    				contentsArrayList.add(titles);
    				for (int i = 0; i < orders.size(); i++) {
    					List<BuyList> butlists = orders.get(i).getBuyList();
    					for (BuyList buyList : butlists) {
    						String[] content = new String[14];
    						content[0] = orders.get(i).getCreateDate();
    						content[1] = orders.get(i).getPayDate();
    						content[2] = orders.get(i).getId();
    						content[3] = buyList.getProductName();
    						content[4] = buyList.getProductTypeStr();
    						if(buyList.getProductPrice()!=null){
    							content[5]=buyList.getProductPrice().toString();	
    						}						
    						content[6] = String.valueOf(buyList.getProductCount());
    						content[7] = orders.get(i).getTotalMoney();
    						content[8] = orders.get(i).getPayStatus() == Order.PAY_PAIY ? "已付款"
    								: "未付款";
    						content[9] = orders.get(i).getName();
    						content[10] = orders.get(i).getMobile();
    						content[11] = orders.get(i).getAddress();
    						OrderStatus orderStatus=orders.get(i).getOrderStatus();
    						if(orderStatus!=null){
    							HistoryStatus historyStatus=orderStatus.getCurrent();
    							if(historyStatus!=null){
    								if(historyStatus.getStatus()==OrderStatus.STATUS_SEND_OUT){
    								content[12] =historyStatus.getDatetime();	
    								}
    							}
    						}
    						content[13] = orders.get(i).isHasInvoice() == true ? "是"
    								: "否";
    						contentsArrayList.add(content);
    					}
    				}
    				String[][] contents = ExcelUtils.changeToArray(contentsArrayList);				
    				String fileName = ExcelUtils.writeExcel(contents, "订单",response);
    			    return true;
    			} catch (Exception e) {
    				e.printStackTrace();
    
    			}
    			return false;
    		}

    public static String writeExcel(String[][] titles, String title, HttpServletResponse response) throws IOException {
    		String fileName =title
    				+ Calendar.getInstance().getTimeInMillis();
    		response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
            //根据传进来的file对象创建可写入的Excel工作薄  
            OutputStream os = response.getOutputStream();  
    			WritableWorkbook wwb = null;
    			try {
    				// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
    
    				wwb = Workbook.createWorkbook(os);
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			if (wwb != null) {
    				// 创建一个可写入的工作表
    				// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
    				WritableSheet ws = wwb.createSheet(title, 1);
    
    				// 下面开始添加单元格
    				for (int row = 0; row < titles.length; row++) {
    					// System.out.println(row);
    					for (int j = 0; j < titles[row].length; j++) {
    						// 这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
    						Label labelC = new Label(j, row, titles[row][j]);
    
    						try {
    							// 将生成的单元格添加到工作表中
    							ws.addCell(labelC);
    						} catch (RowsExceededException e) {
    							e.printStackTrace();
    						} catch (WriteException e) {
    							e.printStackTrace();
    						}
    					}
    				}
    
    				try {
    					// 从内存中写入文件中
    					wwb.write();			 
    					// 关闭资源,释放内存
    					wwb.close();
    					os.flush();
    					os.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				} catch (WriteException e) {
    					e.printStackTrace();
    				}
    			}
    			return fileName;
    		}
    	
    
    	
    	public static String[][] changeToArray(ArrayList<String[]> contentsArrayList) {
    		String[][] contents = new String[contentsArrayList.size()][];
    		for (int i = 0; i < contentsArrayList.size(); i++) {
    			contents[i] = contentsArrayList.get(i);
    		}
    		return contents;
    	}


    关键步骤在于

    1.传入response

    2.设置response的头部文件类型和 把工作簿写入 response的 outputStream中即可。无需特意返回response。

    response.setContentType("application/vnd.ms-excel;charset=utf-8");
    response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
            //根据传进来的file对象创建可写入的Excel工作薄  
            OutputStream os = response.getOutputStream();  
    WritableWorkbook wwb = null;
    try {
               首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
    wwb = Workbook.createWorkbook(os);


    ps: jsp中请求的action 记得要return null,因为 已经包含了 文件流的response。


    如果不是return null的话则会冲突报错。





    优化



    jsp页面 使用js    提交 post  form

        $(document).ready(function() {    
        	var $searchForm = $('#search_form').on('submit',function(){
            	$dt.DataTable().searchEx( {} ).draw();
            	return false;
            }).on('click', 'button.export', function(){ 
            var searchData={};
            searchData.search=$('#search_form').formGet();  
              console.log(searchData);
               post('/order/list/export',searchData);        	
            });
                  
                  
          function post(URL, PARAMS) {        
            var temp = document.createElement("form");        
            temp.action = URL;        
            temp.method = "post";        
            temp.style.display = "none";        
            for (var x in PARAMS.search) {        
               var opt = document.createElement("textarea"); 
               if(x=="id"||x=="expressNumber"||x=="payStatus"){      
                 opt.name = x;        
                 opt.value = PARAMS.search[x];
                 temp.appendChild(opt);  
               }       
            }        
            document.body.appendChild(temp);        
            temp.submit(); 
          }  
    }




    controller.class接收

    @RequestMapping("/product-upgrade/list/export")
        public void export(HttpServletRequest request, HttpServletResponse response) {
            Map<String, String> search = new HashMap<>();
            Enumeration<String> parameterNames = request.getParameterNames();
            while (parameterNames.hasMoreElements()) {
                String key = parameterNames.nextElement();
                search.put(key, request.getParameter(key));
            }
            Query query = new Query();
            Criteria criteria = new Criteria();
            criteria.and("upgradeList").exists(true);
            if (!StringUtils.isBlank(search.get("mobile")))
                criteria.and("mobile").is(search.get("mobile"));
            if (!StringUtils.isBlank(search.get("payStatus")))
                criteria.and("payStatus").is(Integer.parseInt(search.get("payStatus")));
    
            if (!StringUtils.isBlank(search.get("upgradeStatus"))) {
            	if("0".equals(search.get("upgradeStatus"))) {
            		  criteria.orOperator(Criteria.where("upgradeStatus").exists(false), Criteria.where("upgradeStatus").is(0));
            	}else {
                criteria.and("upgradeStatus").is(Integer.parseInt(search.get("upgradeStatus")));
            	}
            } 
       
            if (!StringUtils.isEmpty(search.get("beginTime"))
                    || !StringUtils.isEmpty(search.get("endTime"))) {
                criteria = criteria.and("createDate");
                if (!StringUtils.isEmpty(search.get("beginTime")))
                    criteria.gte(DateUtils.parse(search.get("beginTime")));
                if (!StringUtils.isEmpty(search.get("endTime")))
                    criteria.lte(DateUtils.parse(search.get("endTime")));
    
            }
            query.addCriteria(criteria);
            query.with(new Sort(Sort.Direction.DESC, "createDate"));
            List<Order> list = mongoTemplate.find(query, Order.class);
            exportProductUpgradeOrder(list, response);
        }
    
    
    
    
    
    @Override
        public boolean exportProductUpgradeOrder(List<Order> orders, HttpServletResponse response) {
            try {
     
                ArrayList<String[]> contentsArrayList = new ArrayList<>();
                String[] titles = new String[]{
                        "订单编号", "订单名称", "唾液盒编号", "手机", "总金额", "在线支付",
                        "支付状态", "升级状态", "创建时间", "升级备注"};
    
                Boolean[] titleNumFlags = new Boolean[]{
                        false, false, false, false, true, true,
                        false, false, false, false};// 是否是数值型的标识
    
                contentsArrayList.add(titles);
                for (Order order : orders) {
                    String[] content = new String[titles.length];
                    content[0] = order.getId();
                    content[1] = order.getOrderName();
                    content[2] = order.getUpgradeList().get(0).getBarcode();
                    content[3] = order.getMobile();
                    content[4] = String.valueOf(order.getTotalMoney());
                    content[5] = String.valueOf(order.getPayMoney());
                    content[6] = order.getPayStatus() == Order.PAY_UNPAY ? "未付款" : "已付款";
                    content[7] = order.getUpgradeStatus() == 1 ? "已处理" : "未处理";
                    content[8] = order.getCreateDate();
                    content[9] = order.getUpgradeRemark();
                    contentsArrayList.add(content);
                }
                ExcelUtils.writeExcel(ExcelUtils.changeToArray(contentsArrayList), "导出", response, titleNumFlags);
                return true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        }





    ExcelUtils.class

    package com.mofang.util;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.Calendar;
    
    import javax.servlet.http.HttpServletResponse;
    
    import jxl.Workbook;
    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    import jxl.write.WriteException;
    
    /**
     * ExcelUtils 导出excel
     * 
     * @author joe
     * 
     */
    public class ExcelUtils {
    
        /**
         * 生成一个Excel文件
         * 
         * @param title 工作表的名称
         * @param titles 工作表的内容
         */
    
        public static String writeExcel(String[][] titles, String title,
                HttpServletResponse response, Boolean[] titleNumFlags)
                throws IOException {
            String fileName = title + Calendar.getInstance().getTimeInMillis();
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename="
                    + new String((fileName + ".xls").getBytes(), "iso-8859-1"));
            // 根据传进来的file对象创建可写入的Excel工作薄
            OutputStream os = response.getOutputStream();
            WritableWorkbook wwb = null;
            try {
                // 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
    
                wwb = Workbook.createWorkbook(os);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (wwb != null) {
                // 创建一个可写入的工作表
                // Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
                WritableSheet ws = wwb.createSheet(title, 1);
                jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#0.00"); // 设置数字格式
                jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(
                        nf); // 设置表单格式
                // 下面开始添加单元格
                for (int row = 0; row < titles.length; row++) {
                    // System.out.println(row);
                    for (int j = 0; j < titles[row].length; j++) {
                        if (titleNumFlags[j]) {// 当数值型时先转换成double
                            try {
                                double titlesDoubleValue = Double
                                        .parseDouble(titles[row][j]);
                                ws = writeNumberToWs(ws, wcfN, row, j,
                                        titlesDoubleValue);
                            } catch (Exception notnum) {
                                String titlesStringValue = titles[row][j];
                                // 这里需要注意的是,在Excel中,j表示列,row表示行
                                ws = writeStringToWs(ws, row, j, titlesStringValue);
                            }
                        } else {
                            String titlesStringValue = titles[row][j];
                            // 这里需要注意的是,在Excel中,j表示列,row表示行
                            ws = writeStringToWs(ws, row, j, titlesStringValue);
                        }
                    }
                }
    
                try {
                    // 从内存中写入文件中
                    wwb.write();
                    // 关闭资源,释放内存
                    wwb.close();
                    os.flush();
                    os.close();
                } catch (IOException | WriteException e) {
                    //e.printStackTrace();
                }
            }
            return fileName;
        }
    
        private static WritableSheet writeNumberToWs(WritableSheet ws,
                jxl.write.WritableCellFormat wcfN, int row, int j,
                double titlesDoubleValue) {
            jxl.write.Number labelNF = new jxl.write.Number(j, row,
                    titlesDoubleValue, wcfN); // 格式化数值
            try {
                ws.addCell(labelNF);
            } catch (WriteException e1) {
                e1.printStackTrace();
            }
            return ws;
        }
    
        private static WritableSheet writeStringToWs(WritableSheet ws, int row,
                int j, String titlesStringValue) {
            Label labelC = new Label(j, row, titlesStringValue);
            try {
                // 将生成的单元格添加到工作表中
                ws.addCell(labelC);
            } catch (WriteException e) {
                e.printStackTrace();
            }
            return ws;
        }
    
        public static String[][] changeToArray(ArrayList<String[]> contentsArrayList) {
            String[][] contents = new String[contentsArrayList.size()][];
            for (int i = 0; i < contentsArrayList.size(); i++) {
                contents[i] = contentsArrayList.get(i);
            }
            return contents;
        }
    
    }
    










    桌面程序-swing弹出

    swing只会在服务器中弹出,多用于 桌面程序-----如果用在web中则 在页面点击时,选择框在服务器弹出。

    swing

    public static String writeExcel(String[][] titles, String title) {
    
    		String fileName = "";
    		JFileChooser dialog = new JFileChooser();
    		dialog.setDialogTitle("保存文件");
    		dialog.setFileSelectionMode(JFileChooser.FILES_ONLY);
    		FileSystemView fsv = FileSystemView.getFileSystemView();
    		System.out.println(fsv.getHomeDirectory()); // 得到桌面路径
    		dialog.setCurrentDirectory(fsv.getHomeDirectory()); // 设置默认保存路径为桌面路径
    		// dialog.setDialogType(JFileChooser.SAVE_DIALOG);
    		dialog.setSelectedFile(new File("订单列表"
    				+ Calendar.getInstance().getTimeInMillis() + ".xls")); // 设置默认文件名
    		dialog.setFileFilter(new TextFileFilter("*.xls", "文本文档(*.xls)"));
    		int result = dialog.showSaveDialog(dialog);
    		if (result == JFileChooser.APPROVE_OPTION) {
    			File file = dialog.getSelectedFile();
    			fileName = file.getAbsolutePath(); // 得到文件全名
    
    			WritableWorkbook wwb = null;
    			try {
    				// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
    
    				wwb = Workbook.createWorkbook(new File(fileName));
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			if (wwb != null) {
    				// 创建一个可写入的工作表
    				// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
    				WritableSheet ws = wwb.createSheet(title, 1);
    
    				// 下面开始添加单元格
    				for (int row = 0; row < titles.length; row++) {
    					// System.out.println(row);
    					for (int j = 0; j < titles[row].length; j++) {
    						// 这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
    						Label labelC = new Label(j, row, titles[row][j]);
    
    						try {
    							// 将生成的单元格添加到工作表中
    							ws.addCell(labelC);
    						} catch (RowsExceededException e) {
    							e.printStackTrace();
    						} catch (WriteException e) {
    							e.printStackTrace();
    						}
    					}
    				}
    
    				try {
    					// 从内存中写入文件中
    					wwb.write();
    					// 关闭资源,释放内存
    					wwb.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				} catch (WriteException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		return fileName;
    	}



    展开全文
  • layui导出Excel表格自定义文件名称

    千次阅读 2020-07-07 13:52:46
    2.搜索exportFile,找到d.exportFile=function(e,t,i) 修改 d.exportFile=function(e,t,i,name) 3.搜索table_,找到s.download=(l.title||“table_”+(l.index||"")),修改 s.download=(name||l.title||“table_”...
  • 在“查看问题”页面导出Excel文件后,其文件名虽然是我选择的项目名称,但是,若项目名称中有中文,这就是用%加编码显示。 解决方法是: 在 <MantisBT安装路径>\mantisbt\excel_xml_export.php 中,将:...
  • Java Web 导出Excel路径选择

    千次阅读 2017-12-15 16:57:51
    我主要说明的是 在数据都填到单元格后,下来进行文件输出时 ,需要做的事...//获取传过来的文件名,该文件名是你导出excel文件名 if(null==fileName){ String url = request.getRequestURL().toString(); fi
  • --数据导出依赖 excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</...
  • easypoi实现Excel文件的导出功能

    千次阅读 2018-12-02 23:43:03
    easypoi实现Excel文件的导出功能: 1.先导入依赖包: &lt;!-- easypoi的支持 --&gt; &lt;dependency&gt; &lt;groupId&gt;cn.afterturn&lt;/groupId&gt; &lt;artifactId&...
  • 最近在做一个需要导入导出excel表格的功能,在网上查看参考了一些资料,如quickSheet等,因为时间比较长了,忘了其他参考的作者名称,在这里说声抱歉!!! 首先介绍下功能,随后会上传原工程,喜欢的朋友可以...
  • 使用excelutils导出excel

    千次阅读 2017-11-21 19:16:20
    使用excelutils导出excel非常简单,这里不做很多的介绍,直接贴出代码: 所需要的包有commons-beanutils-1.8.0.jar,commons-digester-1.8.jar,commons-logging-1.1.1.jar,excelutils.jar,poi-3.8-20120326.jar,...
  • 问题是:导出excel表时,出现错误,报404.如下图所示: 我们可以看到,在下载excel表时,地址栏没有问题,且中文文件名正常显示。如中文文件名出现乱码,则需需改tomcat的server.xml文件。 URIEncoding="UTF-8...
  • } /** * 将 List> 类型的数据导出为 Excel * 默认 Excel 文件的输出路径为 项目根目录下 * 文件名 filename + 时间戳 + .xlsx * * @param mapList 数据源(通常数据库查询数据) * @param filename 文件名前缀, ...
  • 前言 此篇记录一下导出功能,分为...例如接口:http://197.23.46.97:8088/exprotExcel,参数:type:'exprot',name:'excel002',get请求,正常流在浏览器中直接访问接口路径http://197.23.46.97:8088/exprotExcel?typ
  • 项目中需要将未上传的数据导出excel,供用户可见。不同的模块传入数据类型不一样。所以用了List<ArrayList>将数据封装成二维string类型。效率还挺高 build.gradle中引入jxl库。 // ...
  • 在“查看问题”页面导出Excel文件后,其文件名虽然是我选择的项目名称,但是,若项目名称中有中文,这就是用%加编码显示。   解决方法是: 在 &lt;MantisBT安装路径&gt;\mantisbt\excel_xml_export....
  • ssm导出Excel表格

    2019-09-12 11:10:58
    最近在做一个导出Excel表格到客户端的功能,想了一下,好像不能直接导出客户端呀,然后就换一个形式下载到客户端。 写不好的地方,请大神指点指点,thank 代码如下: 1.需要注入POI依赖 <!-- 省略ssm...
  • 求助eclipse老司机,现在需求导出多个项目下的所有css,java,sql,js文件名excel中, 最好还能导出文件在项目中的路径
  • 因为个人在项目有该需求,需要在前后端项目中,用户上传excel文件后,在后台将上传excel进行处理之后,在前端通过用户点击返回给用户处理后的excel文件。 思路:将处理之后的文件存入服务器,返回给客户文件的url,...
  • java根据excel模板导出excel

    千次阅读 2019-11-29 09:41:08
    这两天在写用java使用excel模板导出excel的功能,从网上看了看资料都不是太满意,所以就趟了一次坑,并且记录 所需pom <dependency> <groupId>org.apache.poi</groupId> <artifactId>...
  • 1997-2003版行列数量限制:行-...本文以07版例。关于到导出策略,又有两种方式可供选择,一种是直接写代码来导出,但是每次都要去写表头,复制代码,这种方式的代码量比较大;另一种则是基于模板来导出,先写好表头
  • Java之Excel导出工具类使用教程

    千次阅读 多人点赞 2019-03-20 17:34:02
    本工具类经过PostMan...市面上有很多封装好的导出工具(如:阿里的easyExcel,GitHub上xxl-excel等),但如果直接引用依赖,扩展性定制性比较差,所以博主通过apache.poi,自己实现一款Excel导出工具,方便定制使用。
  • 项目中新建一个文件夹(一般在src下新建,文件名自取,在这里命名为excel),在文件夹中放入Blob.js export2Excel.js (这两个文件可在gitup上进行下载) Blob.js ,export2Excel.js下载地
  • python处理pandas读取文件名有中文报错问题解决方法,
  • 前端导出excel表格, 前端导出下载文件, 用new Blob()导出文件, 前端导出文件乱码解决
  • freemarker导出excel

    2017-08-02 10:36:45
    这是我最近用过的一种导出excel表格是方式 首先将自己需要的表格格式用office excel表格提前写好, 再另存,在这个时候我们保存的文件格式就要有所改变了. 这此时选择.xml格式进行保存.保存成功以后用...
  • 将数据导出Excel

    千次阅读 2019-05-23 22:54:38
    最近在做一个项目,涉及到将数据导出excel,因此花了一天多时间,从网上查询了一些相关方法:下面做一下总结: 下面这个项目里面的步骤是本人已经成功应用到项目中的。 第一步骤:将NPOI DLL文件引用到项目中: ...
  • 1.需求场景:项目中联系人模块需要导入导出excel和下载excel模板功能 此处只记录 下载模板和导出excel功能遇到的问题 2.流程:前台用超链接形式 点击后发送get请求 然后后台实现功能。(这样一想很简单的功能) 3....
  • flask导出Excel报表详解

    千次阅读 2020-04-07 08:43:17
    没有实例的讲解很不容易理解,本文我们依然从实际项目来讲解,对 “flask+mysql微信小程序开源项目” 进一步扩展 ,教大家以项目为驱动来学习软件开发技术 。 1、后台接口编写 flask 可以使用 xlwt 扩展插件来完成对...
  • 3)修改Export2Excel.js文件中,引入Blob.js的路径 4)表格数据 5)点击导出表格按钮时,调用方法export2Excel 6)完整的Home.vue文件 1)首先安装三个依赖 npm install -S file-saver xlsx npm install -D ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,164
精华内容 1,665
关键字:

导出项目文件名和路径为excel