java制作excel报表

本程序是java程序

直接将DoExcelHelper.java放入到项目中修改下package的名就行了。

怎么样使用DoExcelHelper这个类:

具体的请看DoExcelHelper.java的main方法(也可直接运行main方法,但要注意修改文件保存的路径,不然就会找不到路径哦)。

setTitle(String)方法是添加报表最顶部的标题的。

setF_name(String[])添加参数的(key)

setF_value(String[])添加参数值的(value),请与参数对应即:key:value

setIsVerticalFreeze(boolean);//是否对header进行冻结,让表头随着滚动条而滚动。默认:false

setHeader(String[])方法是添加要显示的内容的标题的,就好比是table标题(thead).

最后调用write(list,"F:/workspace/TestFolder/workOrder.xls");//第一个参数:数据集合(List<String[]);第二个参数:存储路径(我这里是本地路径),如果是在servlet中则是:request.getSession().getServletContext().getRealPath("/")+"项目中的文件夹名字/workOrder.xls";

最后返回true和false,表示成功与否。
 (注意:需下载jxl.jar包)

package com.zhb.DBHelper;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

/**
 * 传入各个属性并将数据写入excel
 * @author 张红兵
 * 通用报表格式
 * 修改时间:2013-07-11
 * 修改内容:修改条件显示的格式,由原来的一行显示两个条件信息修改为一行显示一个条件信息,使报表看起来更直观,更简洁
 *
 */
public class DoExcelHelper {
	private String title="报表";//标题
	private String[] header;//表头
	private String[] f_name;//条件名称
	private String[] f_value;//条件值
	private boolean isVerticalFreeze=false;//是否需要对行进行窗口冻结(默认不冻结)
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<String[]> list=new ArrayList<String[]>();
		list.add(new String[]{"2013-05-12","user1","user1登入了系统"});
		list.add(new String[]{"2013-05-13","user2","user2登入了系统"});
		list.add(new String[]{"2013-05-14","user3","user3登入了系统"});
		DoExcelHelper deh=new DoExcelHelper();
		deh.setTitle("log日志");//添加报表标题
		
		String[] title={"操作时间","操作人员","操作内容"};
		deh.setHeader(title);
		//添加报表的查询字段名称
		String[] fname={"开始时间","结束时间","操作用户"};
		deh.setF_name(fname);//没有查询字段则直接赋值null
		//添加报表的查询字段值
		String[] fvalue={"2012-01-03","2012-01-11","admin","2013-05-06"};
		deh.setF_value(fvalue);//没有查询字段则直接赋值null
		deh.setIsVerticalFreeze(true);//是否对header进行冻结,让表头随着滚动条而滚动。默认:false
		boolean bool=deh.write(list,"F:/workspace/TestFolder/workOrder.xls");//第一个参数:数据集合;第二个参数:存储路径(我这里是本地路径),如果是在servlet中则是:request.getSession().getServletContext().getRealPath("/")+"项目中的文件夹名字/workOrder.xls";
		System.out.println(bool);
	
	}
	
	
	
	/**
	 *<br>方法说明:写入文件操作
	 *<br>输入参数:数据和输出路径
	 *<br>返回类型:boolean
	 */
	  public boolean write(List<String[]> list,String path){
		  boolean bool=true;
	    try{
	    	File file=new File(path);
	    	//如果path是看null或者path是空值
	    	if(path==null || path.trim().equals("")){
	    		System.out.println("缺少存放文件的路径");
	    		return false;
	    	}
	    	
	    	
	    	  int lenght=5;
		      //根据表头的长度来确认合并单元格添加标题
		       if(this.getHeader()!=null && this.getHeader().length>0){
		    	   lenght=this.getHeader().length;
		       }else{//判断文件表头是否存在
		    	   System.out.println("缺少文件表头");
		    		return false;
		       }
	        //创建一个可写入的excel文件对象
	        WritableWorkbook workbook = Workbook.createWorkbook(file); 
	        //使用第一张工作表,将其命名为“操作记录日志”
	        WritableSheet sheet = workbook.createSheet("sheet", 0);
	      
	      //去掉整个sheet中的网格线 
	        sheet.getSettings().setShowGridLines(false);     
	   
	      //定义标题单元格样式
	        WritableCellFormat wcf_title = this.getTitle_Font();
	      //定义条件单元格样式
	        WritableCellFormat wcf_filter = this.getFilter_Font();
	      //定义表头单元格样式
	        WritableCellFormat wcf_head = this.getHeader_Font();  
	      //定义表格内容单元格样式
	        WritableCellFormat wcf_table = this.getTable_Font();  
	      //左边单元格的样式
	        WritableCellFormat wcf_leftCell = this.getLeftCell_Font();
	       int line_num=0;//从第1行开始放数据
	      //根据表头的长度来确认合并单元格添加标题
	        sheet.mergeCells(0, line_num, lenght, line_num);//合并第line_num行的地1到this.getHeader().length个单元格
	        Label label = new Label(0, line_num, this.getTitle(),wcf_title); 
	        sheet.addCell(label); 
	        
	        //放查询条件的名称和值
	        line_num+=2;//从第几行开始放条件
	        if(this.getF_name()!=null){
	        	//String content="";
	        	for(int i=0;i<this.getF_name().length;i++){
	        		Label fn_label = new Label(1, line_num, this.getF_name()[i]+":",wcf_leftCell); 
    		        sheet.addCell(fn_label); 
	        		sheet.mergeCells(2, line_num, 4, line_num);//合并第line_num行的地1到5个单元格
	        		Label fv_label = new Label(2, line_num,this.getF_value()[i],wcf_filter); 
    		        sheet.addCell(fv_label); 
    		        line_num++;
	        	}
	        }
	      //添加报表生产日期
	        Label reportDate_label=new Label(1,line_num,"报表日期:",wcf_leftCell);
	        sheet.addCell(reportDate_label);
	        sheet.mergeCells(2, line_num, 4, line_num);//合并第line_num行的第2到5个单元格
    		Label reportDate_value = new Label(2, line_num,new SimpleDateFormat("yyyy-MM-dd").format(new Date()),wcf_filter); 
	        sheet.addCell(reportDate_value);
	        
	        //表头
	        String[] header=this.getHeader();
	        line_num++;//从另一行开始添加表头数据
	        for(int i=0;i<header.length;i++){
	        	Label title_label = new Label(i, line_num, header[i],wcf_head); 
		        sheet.addCell(title_label); 
		        sheet.setColumnView(i, 20); //设置列的高度
	        }
	        line_num++;//从另一行开始添加数据
	      //是否需要从表头开始对行进行冻结
	        if(this.getIsVerticalFreeze()){
	        	sheet.getSettings().setVerticalFreeze(line_num);
	        }
	        
	      //如果list是null或者没有数据
	        if(list!=null && list.size()>0){
	        for(int i=0;i<list.size();i++){
	        	String[] content=(String[])list.get(i);
	        	for(int j=0;j<content.length;j++){
	        			//普通字符
	        	        Label labelCFC = new Label(j, line_num, content[j],wcf_table); 
	        	        sheet.addCell(labelCFC); 
	        	}
	        	line_num++;
	        }
	        }
	        //关闭对象,释放资源
	        workbook.write(); 
	        workbook.close(); 

	    }catch(Exception e){
	    	bool=false;
	     e.printStackTrace();
	    }
	    return bool;
	  }

	  /**
	   * 定义标题单元格样式 
	   * @return
	   * @throws WriteException
	   */
	  public WritableCellFormat getTitle_Font() throws WriteException{	   
	          //单元格样式 
	        WritableFont wf_title = new WritableFont(WritableFont.ARIAL, 20,  
	                WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,  
	                jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色  
	        WritableCellFormat wcf_title = new WritableCellFormat(wf_title); // 单元格定义  
	       // wcf_title.setBackground(jxl.format.Colour.BLACK); // 设置单元格的背景颜色  
	        wcf_title.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式  
	        
	        return wcf_title;
	    
	  }
	  /**
	   * 定义条件单元格样式 
	   * @return
	   * @throws WriteException
	   */
	  public WritableCellFormat getFilter_Font() throws WriteException{	   
	          //单元格样式 
	        WritableFont wf_filter = new WritableFont(WritableFont.ARIAL, 10,  
	                WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,  
	                jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色  
	        WritableCellFormat wcf_filter = new WritableCellFormat(wf_filter); // 单元格定义  
	        //wcf_filter.setBackground(jxl.format.Colour.BLACK); // 设置单元格的背景颜色  
	        wcf_filter.setAlignment(jxl.format.Alignment.LEFT); // 设置对齐方式  
	        return wcf_filter;
	    
	  }
	  /**
	   * 表头单元格样式
	   * @return
	   * @throws WriteException
	   */
	  public WritableCellFormat getHeader_Font() throws WriteException{
		//单元格样式 
	        WritableFont wf_head = new WritableFont(WritableFont.ARIAL, 14,  
	                WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,  
	                jxl.format.Colour.GREEN); // 定义格式 字体 下划线 斜体 粗体 颜色  
	        
	        WritableCellFormat wcf_head = new WritableCellFormat(wf_head); // 单元格定义    
	        //wcf_head.setBackground(jxl.format.Colour.BLACK);  // 设置单元格的背景颜色   
	        wcf_head.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式    
	        return wcf_head;
	       
	  }
	  /**
	   * 表格内容单元格样式
	   * @return
	   * @throws WriteException
	   */
	  public WritableCellFormat getTable_Font() throws WriteException{
			//单元格样式 
	        WritableFont wf_table = new WritableFont(WritableFont.ARIAL, 10,  
	                WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,  
	                jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色  
	        WritableCellFormat wcf_table = new WritableCellFormat(wf_table);  // 单元格定义 
	        //wcf_table.setBackground(jxl.format.Colour.BLACK);// 设置单元格的背景颜色     
	        wcf_table.setAlignment(jxl.format.Alignment.CENTRE);// 设置对齐方式 
	        return wcf_table;
	  }
 
	  /**
	   * 左边单元格的样式
	   * @return
	   * @throws WriteException
	   */
	  public WritableCellFormat getLeftCell_Font() throws WriteException{
			//单元格样式 
	        WritableFont wf_table = new WritableFont(WritableFont.ARIAL, 10,  
	                WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,  
	                jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色  
	        WritableCellFormat wcf_table = new WritableCellFormat(wf_table);  // 单元格定义 
	        wcf_table.setAlignment(jxl.format.Alignment.LEFT);// 设置对齐方式 
	        return wcf_table;
	  }



	public String getTitle() {
		return title;
	}


	/**
	 * 添加标题
	 * @param title
	 */
	public void setTitle(String title) {
		this.title = title;
	}


	
	public String[] getHeader() {
		return header;
	}

	/**
	 *  添加表头
	 * @param header
	 */
	public void setHeader(String[] header) {
		this.header = header;
	}

	public String[] getF_name() {
		return f_name;
	}

	/**
	 * 增加查询条件名
	 * @param f_name
	 */
	public void setF_name(String[] f_name) {
		this.f_name = f_name;
	}

	public String[] getF_value() {
		return f_value;
	}

	/**
	 * 增加查询条件值
	 * @param f_value
	 */
	public void setF_value(String[] f_value) {
		this.f_value = f_value;
	}

	
	public boolean getIsVerticalFreeze() {
		return isVerticalFreeze;
	}
	/**
	 * 是否需要从表头开始对行进行窗口冻结(默认false)
	 * @return
	 */
	public void setIsVerticalFreeze(boolean isVerticalFreeze) {
		this.isVerticalFreeze = isVerticalFreeze;
	}


	

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Apache POI库来生成Excel报表。以下是一个简单的示例代码,可以创建一个包含一些数据的Excel工作簿,并将其保存在本地文件系统上。 ```java import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelGenerator { public static void main(String[] args) throws IOException { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Report"); // 创建头 Row headerRow = sheet.createRow(0); Cell headerCell1 = headerRow.createCell(0); headerCell1.setCellValue("Name"); Cell headerCell2 = headerRow.createCell(1); headerCell2.setCellValue("Age"); Cell headerCell3 = headerRow.createCell(2); headerCell3.setCellValue("City"); // 创建数据行 Row dataRow = sheet.createRow(1); Cell dataCell1 = dataRow.createCell(0); dataCell1.setCellValue("John"); Cell dataCell2 = dataRow.createCell(1); dataCell2.setCellValue(30); Cell dataCell3 = dataRow.createCell(2); dataCell3.setCellValue("New York"); // 保存工作簿到本地文件系统 FileOutputStream outputStream = new FileOutputStream("report.xlsx"); workbook.write(outputStream); workbook.close(); } } ``` 这个示例代码创建了一个名为“Report”的工作,并在第一行创建了一个头。然后,在第二行创建了一行数据。最后,将工作簿保存到名为“report.xlsx”的本地文件中。可以根据需要修改此代码以生成更复杂的Excel报表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值