`
jingliankui123
  • 浏览: 104743 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

页面表格成Execl

    博客分类:
  • java
阅读更多

 ExcleBuild.java//生成Execl所要的类
package com.richsoft.sxdl.session.tools.graphics;

import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import com.richsoft.sxdl.session.tools.graphics.Module.Position;


/**
 * 生成Excle 封闭类
 * @author Administrator
 *
 */
public class ExcleBuild {
    
	
	/**
	 * 根据 json 串 封装数组
	 * @param json
	 * @return
	 */
	public  List<Module> getList(String json){
    	
    	List<Module> list = new ArrayList<Module>();//生成Excle所要的数据
        JSONArray jons = JSONArray.fromObject(json);
        int col_length = 0;           //2维数组长
        int row_length = jons.size(); //2维数组宽
    
        for(int i=0;i<jons.getJSONArray(0).size();i++){
       	 JSONObject ojb = jons.getJSONArray(0).getJSONObject(i);
       	 col_length+=ojb.getInt("colspan");
        }
        
        //根据table封装数据
        String[][] table = new String[row_length][col_length];//把json数组转化为2维数组
        
        
        /**
         * 给2维数组赋初始值
         */
        for(int i=0;i<table.length;i++){
       	 for(int j=0;j<table[i].length;j++){
       		 table[i][j]="#";
       	 }
        }
        
        
        /**
         *  给2维数组赋值
         */
        for(int i=0;i<row_length;i++){
       	 JSONArray array = jons.getJSONArray(i);
       	 int col_index = 0;//记录二维数组到那个例
       	 for(int j=0;j<array.size();j++){
       		 Module m = new Module();
       		 JSONObject ojb = jons.getJSONArray(i).getJSONObject(j);
       		  String title = ojb.getString("title");
       		  int col_num = ojb.getInt("colspan");
       		  int row_num = ojb.getInt("rowspan");
       		  m.setTitle(title);
       		  if(col_num>1 || row_num>1){//跨行或跨例
       			  if(col_num>1 && row_num>1){//根据json数据中colspan和rowspan都大于1时 就是即跨行,又跨例
       				    for(int w=i;w<(i+row_num);w++){
	        				    	for(int c=col_index;c<(col_index+col_num);c++){
	        				    		if("#".equals(table[w][c])){//当二维数组还是初始值时(也就是/跨行或跨例没有影响这个单元格)
	        				    			m.addList(m.getPosition(w, c));
	        				    			table[w][c] = title;
	        				    		}else{
	        				    			for(int h=col_index;h<table.length;h++){
	        				    				if(!"#".equals(table[w][h])){
	        				    					continue;
	        				    				}
	        				    				m.addList(m.getPosition(w, h));
	        				    				table[w][h]=title;
	        				    				break;
	        				    			}
	        				    		}
	        				    	}  
       				    }
       				    col_index+=row_num;
       			  }else{//跨行或跨例
       				  if(col_num>1){//只跨例时
           				  for(int c=col_index;c<(col_index+col_num);c++){
           					  if("#".equals(table[i][c])){
           						   m.addList(m.getPosition(i, c));
           						   table[i][c] = title;
           					  }else{
           						  for(int h=col_index;h<table.length;h++){
           							  if(!"#".equals(table[i][h])){
           								  continue;
           							  }
           							  m.addList(m.getPosition(i, h));
           							  table[i][h]=title;
           							  break;
           						  }
           					  }
           				  }
           				  col_index+=col_num-1;//当跨例时我们的两维数组的列只加了一个,所以还要把它跨几例也要加上
           			  }
           			  
           			  if(row_num>1){//只跨行
           				  for(int c=i;c<(i+row_num);c++){
           					  if("#".equals(table[c][col_index])){
           						  m.addList(m.getPosition(c, col_index));
           						  table[c][col_index]= title;
           					  }else{
           						  for(; col_index<table[i].length;col_index++){
           							   if(!"#".equals(table[c][col_index])){
           								   continue;
           							   }else{
           								   m.addList(m.getPosition(c, col_index));
           								   table[c][col_index] = title;
           								   break;
           							   }
           						  }
           					  }
           				  }
           			  }
       			  }
       		  }else{//没跨行也没有跨例
       			   if("#".equals(table[i][col_index])){
       				    m.addList(m.getPosition(i, col_index));
       				    table[i][col_index] = title;
       			   }else{
       				    for(;col_index<table[i].length;col_index++){
       				    	 if(!"#".equals(table[i][col_index])){
       				    		 continue;
       				    	 }
       				    	 m.addList(m.getPosition(i, col_index));
       				    	 table[i][col_index] = title;
       				    	    break;
       				    }
       			   }
       		  }
       		  col_index++;
       		  list.add(m);
       	 }
        }
        return list;
    }
    
    
    /**
     * 生成成Excle 
     * @param list  数据
     * @param out   输出流
     */
    public static void writeTable(List<Module> list,OutputStream out){
		try {
	        WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
		    WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 14,WritableFont.BOLD);
		    WritableFont tableFont = new WritableFont(WritableFont.ARIAL, 12,WritableFont.NO_BOLD);
		    WritableFont baodanFont = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD);
		    
		    WritableCellFormat wcf_center = new WritableCellFormat(NormalFont);
		    
		    wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); 
		    //把垂直对齐方式指定为居中
		    wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); 
		    //把水平对齐方式指定为居中
		    wcf_center.setAlignment(Alignment.CENTRE);
		    wcf_center.setWrap(true);  
			WorkbookSettings setting = new WorkbookSettings();//对excl基础信息的设置
			java.util.Locale locale = new java.util.Locale("zh", "CN");
			setting.setLocale(locale);
			setting.setEncoding("utf-8");    
			// 打开文件
			WritableWorkbook book = Workbook.createWorkbook(out,setting);
			WritableSheet sheet = book.createSheet("第一页", 0);
			// 写入数据并关闭文件
	        for (Module module : list) {
	        	List<Position> plist = module.getList();
	        	if(plist.size()>1){
	        		sheet.mergeCells(plist.get(0).getCol(),plist.get(0).getRow() , plist.get(plist.size()-1).getCol(), plist.get(plist.size()-1).getRow());
	        		Label label = new Label(plist.get(0).getCol(),plist.get(0).getRow(),module.getTitle(),wcf_center);
	        		sheet.addCell(label);
	        	}else if(plist.size()==1){
	        		Label label = new Label(plist.get(0).getCol(),plist.get(0).getRow() , module.getTitle(),wcf_center);
	        		sheet.addCell(label);
	        	}
			}	 
	      	book.write();
			book.close(); 
	        
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

Servlet

package com.richsoft.sxdl.session.tools.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.richsoft.sxdl.session.tools.graphics.ExcleBuild;
import com.richsoft.sxdl.session.tools.graphics.Module;

public class DowlaodExcle extends HttpServlet {

 private static final long serialVersionUID = 1L;

 public DowlaodExcle() {
  super();
 }

 public void destroy() {
  super.destroy(); 
 }

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

            doPost(request, response);
 }

 
 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=download.xls");
  String json = request.getParameter("json");
  ServletOutputStream out = response.getOutputStream();  
  ExcleBuild eb = new ExcleBuild();
  List<Module> list = eb.getList(json);
  eb.writeTable(list,out);
 }

 
 
 
 public void init() throws ServletException {
 }

}

  

package com.richsoft.sxdl.session.tools.graphics;

import java.util.ArrayList;
import java.util.List;

public class Module {
    
	private String title;
	
	List<Position> list = new ArrayList<Position>();
	
	public void addList(Position p){
		list.add(p);
	}
	
	public  Position getPosition(int row,int col){
		return new Position(row,col);
	}

	class Position {
		
		private int row;
		
		private int col;
        
		public Position() {
		}
		
		public Position(int row,int col) {
			this.row = row;
			this.col = col;
		}
		
		public int getRow() {
			return row;
		}

		public void setRow(int row) {
			this.row = row;
		}

		public int getCol() {
			return col;
		}

		public void setCol(int col) {
			this.col = col;
		}

	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public List<Position> getList() {
		return list;
	}

	public void setList(List<Position> list) {
		this.list = list;
	}
}

 

 function dowloadExcle(id){//id 是你表格id的名子
            var trs = $("tr",$("#"+id));
		      var str = "[";
		      $.each(trs,function(i,n){
	               var tds = $("td,th",$(n));
	               str+="["
	               $.each(tds,function(j,f){
	                    var rowspan = $(f).attr("rowspan")?$(f).attr("rowspan"):1;
	                    var colspan = $(f).attr("colspan")?$(f).attr("colspan"):1;
	                    str+="{'title':'"+fileScript($.trim($(f).text()))+"','rowspan':"+rowspan+",'colspan':"+colspan+"},";
	               });
	               if(tds.length>0)
	                    str=str.substring(0,str.length-1);
	               str+="],";
		      });
		      if(str.length>2)
		      str=str.substring(0,str.length-1);
		      str+="]";
       
       
       var html ="<form style='display:none;' id='excleForm' action='"+path+"/tool/DowlaodExcle' method='post'>";
           html+="<input type='hidden' id='exjson' name='json' value=\""+str+"\"/>";
           html+="</form>";
       if($("#excleForm").size()==0){
       	  $(document.body).append(html);
       }else{
          var obj = document.getElementById("exjson");
          if(obj){
             obj.value = str;
          }
       }
      
      document.getElementById("excleForm").submit();
 }
 

 

	 String json = "[" +
	 		"[{'title':'所有仓库','rowspan':3,'colspan':1},{'title':'所有货架','rowspan':3,'colspan':1},{'title':'工器具统计','rowspan':1,'colspan':7}]," +
	 		"[{'title':'工器具总数','rowspan':2,'colspan':1},{'title':'在库','rowspan':1,'colspan':4},{'title':'出库','rowspan':1,'colspan':2}]," +
	 		"[{'title':'正常','rowspan':1,'colspan':1},{'title':'损坏','rowspan':1,'colspan':1},{'title':'报废','rowspan':1,'colspan':1},{'title':'试验过期','rowspan':1,'colspan':1},{'title':'使用出库','rowspan':1,'colspan':1},{'title':'试验出库','rowspan':1,'colspan':1}]," +
	 		"[{'title':'山西仓库1','rowspan':2,'colspan':1},{'title':'未分配货架工器具','rowspan':1,'colspan':1},{'title':'8','rowspan':1,'colspan':1},{'title':'5','rowspan':1,'colspan':1},{'title':'3','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1}]," +
	 		"[{'title':'货架总计','rowspan':1,'colspan':1},{'title':'8','rowspan':1,'colspan':1},{'title':'5','rowspan':1,'colspan':1},{'title':'3','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1}]," +
	 		"[{'title':'仓库总数','rowspan':1,'colspan':2},{'title':'8','rowspan':1,'colspan':1},{'title':'5','rowspan':1,'colspan':1},{'title':'3','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1},{'title':'0','rowspan':1,'colspan':1}]" +
	 		"]";

 

分享到:
评论

相关推荐

    html页面表格导出excel(原生js浏览器全兼容)

    在网页开发中,有时我们需要将HTML表格的数据导出到Excel文件中,以便用户可以方便地进行数据管理和分析。原生JavaScript实现的HTML表格导出功能,无需依赖后台接口,能够实现浏览器全兼容,大大提高了用户体验。...

    jQuery把页面上的表格导出Excel表格

    通过jQuery技术,把页面上的表格导出Excel,导出时解决纯数据导出后显示科学计数法和日期型导出后为#号显示问题

    c#.netweb页面嵌入excel控件,网页中在线编辑EXCEL表格实例

    本实例以"C#.NET Web页面嵌入Excel控件,网页中在线编辑EXCEL表格"为主题,详细讲解这一技术的实现方法和关键知识点。 首先,我们要理解的是,为了在Web页面上显示和编辑Excel,我们需要一个能够处理Excel文件的...

    layui数据表格导出Excel插件

    `excel.min.js`则是经过压缩和优化后的版本,适用于生产环境,以减少加载时间和提高页面性能。这两个文件都是JavaScript库,通过在layui表格中添加相应的操作按钮,实现一键导出数据到Excel的功能。 要使用这个插件...

    JSP页面导出EXCEL简单方法

    2. **构建Excel导出逻辑**:在JSP中,我们可以创建一个新的JSP页面(如excel.jsp),该页面的主要任务是将HTML表格转换为Excel格式。这通常涉及到读取HTML表格的数据并生成Excel文件的二进制内容。 3. **设置响应头...

    把页面的table表格导成excel

    注意,是把页面上的table表格导成excel,此方式适用于很复杂的表格导出

    web页面嵌入excel控件,网页中在线编辑EXCEL表格实例

    在网页中嵌入Excel控件是一项实用的技术,它允许用户在网页环境中直接编辑和操作Excel表格,无需安装完整的Microsoft Office套件。这种技术基于Office Web Components(OWC),这是一个由微软开发的组件集,用于在...

    excel复制数据,粘贴到页面表格插件.zip

    本项目提供的"前端实现excel复制数据,粘贴到页面表格工具.zip"就是一个解决此类问题的实例。下面将详细介绍这个项目及其相关知识点。 首先,项目中包含三个文件:test.html、jquery.min.js和tableCJ。`test.html`...

    页面表格数据生成excel文件下载

    在这个"页面表格数据生成excel文件下载"的例子中,我们可以看到两个关键的Java文件:DownController.java和ExcelUtil.java。下面我们将详细探讨这两个文件可能实现的功能和涉及的技术。 首先,`DownController.java...

    HTML表格生成Excel文件代码.zip

    它们允许开发者快速实现特定功能,如在这个案例中,将HTML表格转换成Excel格式。 4. **jquery.table2excel插件**:这个插件的工作原理是将HTML表格内容转换为符合Excel文件格式的数据,然后通过创建一个隐藏的`&lt;a&gt;`...

    将页面表格信息以excel形式供用户下载

    6. **用户手册**:提供的`将页面表格信息生成Excel文件供用户下载.txt`文档很可能是对整个过程的详细说明,包括如何配置项目、如何使用示例代码以及可能出现的问题和解决办法。 学习这个示例,你可以了解如何将Web...

    在页面中导入excel文件并以表格显示

    综上所述,实现“在页面中导入Excel文件并以表格显示”的功能,涉及到前端的文件上传、数据解析、表格渲染,以及可能的后端处理和跨浏览器兼容性优化。使用合适的工具库和遵循最佳实践,可以高效地完成这一任务。

    ASP.NET页面数据导出excel

    ASP.NET页面数据导出到Excel是常见的需求,用于将网页上的数据以电子表格的形式供用户下载和进一步处理。本文将详细介绍四种从ASP.NET页面导出数据到Excel的方法。 方法一: 这种方法利用了ASP.NET的Response对象,...

    纯JS对页面表格进行EXCEL导出(完整导出,包含页面样式)

    纯JS对页面表格进行EXCEL导出 ** 1.中间部分在style标签那种可以使用css样式对表格进行任意样式的修改 2.在tableid[removed]中可以对表格中的内容进行修改替换(其中放的内容就是导出后的表格内容) 3.需要引入xlsx....

    页面表格内容导入excelDemo 实现

    "页面表格内容导入excelDemo 实现"这个标题所指的,是一个利用JavaScript插件tableexport.js来实现网页表格数据导出为Excel文件的示例项目。下面我们将详细探讨这个知识点。 首先,tableexport.js是一个流行的...

    java导出页面表格数据到excel表

    一个完整的导出html页面数据到excel表内,超简单

    ASP页面转换成EXCEL报表

    ASP(Active Server ...综上所述,将ASP页面转换成EXCEL报表的过程包括了动态生成HTML表格、设置HTTP响应头、处理数据和确保安全等多个环节。在实际开发中,可以根据需求灵活调整策略,以满足不同场景下的用户需求。

    java,jsp,javascript中如何实现将统计表格保存成excel文件

    在Java、JSP和JavaScript中实现将统计表格保存为Excel文件是一个常见的需求,尤其是在数据分析和报表展示场景下。以下是一个详细的步骤和示例代码来帮助理解这个过程。 1. **前端JavaScript部分**: JavaScript...

    利用Jscrīpt复制网页中的表格到Excel中

    根据给定的信息,本文将详细解释如何利用JavaScript技术将网页中的表格内容复制到Excel的一个工作表(Sheet)中。此方法对于需要频繁处理表格数据、并希望将其转换为Excel格式以便进行进一步分析或报告的人来说非常...

Global site tag (gtag.js) - Google Analytics