Java导出Excel表格

当前B/S模式已成为应用开发的主流,很多时候需要实现导入、导出Excel的应用。

1.下载相关jar包 

    下载链接:https://pan.baidu.com/s/1iMspcX18WytfSWEGBNEsLQ 密码:jhy0  

    也可自行下载    jxl.jar。

2.将jxl.jar拷贝到项目的lib下

    

3.使用Java Excel Api 导出 Excel文件

    代码应封装到业务层组件中,然后在控制层中调用。这里直接写在控制层组件,如Servlet的doGet/doPost方法。下面直接上代码。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//字符格式
		request.setCharacterEncoding("utf-8");
		String path = "";
		if (request.getPathInfo() != null) {
			path = request.getPathInfo().substring(1);
		}
		System.out.println("Excel导出:"+path);
		OutputStream output = response.getOutputStream();
		response.reset();
		response.setHeader("Content-disposition","attachment; filename=temp.xls");
		response.setContentType("application/msexcel");
		// 创建可写入的Excel工作薄,且内容将写入到输出流,并通过输出流输出给客户端浏览 (发送给客户端)
		WritableWorkbook wwb = Workbook.createWorkbook(output);
		// 创建可写入的Excel工作薄  (写入磁盘)
		// File file = new File("d://test.xls");
		// WritableWorkbook wwb = Workbook.createWorkbook(file);
		// /创建可写入的Excel工作表
		WritableSheet sheet = wwb.createSheet("用户表", 0);
		try {
			// 单元格合并方法
			sheet.mergeCells(0, 0, 4, 0);
			// 创建WritableFont 字体对象,参数依次表示黑体、字号12、粗体、非斜体、不带下划线、亮蓝色
			WritableFont titleFont = new WritableFont(WritableFont.createFont("微软雅黑"), 12, WritableFont.BOLD,false, UnderlineStyle.NO_UNDERLINE, Colour.YELLOW);
			// 创建WritableCellFormat对象,将该对象应用于单元格从而设置单元格的样式
			WritableCellFormat titleFormat = new WritableCellFormat();
			// 设置字体格式
			titleFormat.setFont(titleFont);
			// 设置文本水平居中对齐
			titleFormat.setAlignment(Alignment.CENTRE);
			// 设置文本垂直居中对齐
			titleFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
			// 设置背景颜色
			titleFormat.setBackground(Colour.GRAY_25);
			// 设置自动换行
			titleFormat.setWrap(true);
			WritableCellFormat cloumnTitleFormat = new WritableCellFormat();
			cloumnTitleFormat.setFont(new WritableFont(WritableFont.createFont("微软雅黑"), 10, WritableFont.BOLD, false));
			cloumnTitleFormat.setAlignment(Alignment.CENTRE);
			// 添加Label对象,参数依次表示在第一列,第一行,内容,使用的格式
			if("movie".equals(path)){
				sheet.addCell(new Label(0, 0, "电影表", titleFormat));
				sheet.addCell(new Label(0, 1, "电影名称", cloumnTitleFormat));
				sheet.addCell(new Label(1, 1, "类别", cloumnTitleFormat));
				sheet.addCell(new Label(2, 1, "导演", cloumnTitleFormat));
				sheet.addCell(new Label(3, 1, "主演", cloumnTitleFormat));
				sheet.addCell(new Label(4, 1, "地区", cloumnTitleFormat));
				sheet.addCell(new Label(5, 1, "上映时间", cloumnTitleFormat));
				sheet.addCell(new Label(6, 1, "简介", cloumnTitleFormat));
				int row = 2;
				//实例操作类,查询数据库内的电影
				MovieDAOImp mdi = new MovieDAOImp();
				//实例操作类,查询数据库内的电影类别
				TypeDAOImp tdi = new TypeDAOImp();
				for (Movie movie : mdi.selectMovieAll()) {
					int col = 0;
					sheet.addCell(new Label(col++, row, movie.getMovieName()));
					sheet.addCell(new Label(col++, row, tdi.typeName(movie.getTypeID(), "").getTypeName()));
					sheet.addCell(new Label(col++, row, movie.getDirector()));
					sheet.addCell(new Label(col++, row, movie.getStardom()));
					sheet.addCell(new Label(col++, row, movie.getRegion()));
					sheet.addCell(new Label(col++, row, movie.getShowtime()));
					sheet.addCell(new Label(col++, row, movie.getDescription()));
					row++;
				}
			}
		} catch (RowsExceededException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (WriteException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		// 操作完成时,关闭对象,释放占用的内存空间
		try {
			wwb.write();
			wwb.close();
		} catch (WriteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
4.对于Excel单元格操作和数据格式化

    对于字体,字号以及数据格式化,我们需要构造WritableFont和WritableCellFormat类,如

        创建一个字体为宋体,字号14,加粗显示的字体格式

    //  宋体,14号字,加粗
    WritableFont font=new WritableFont(WritableFont.createFont("宋体"),14,WritableFont.NO_BOLD );
    WritableCellFormat format = new WritableCellFormat(font);
    //  第N列,第N行,文本内容,格式
    Label label=new Label(0,0,”编号001”,format);

    与Label类似的还有Number、DateTime,区别Label表示文本数据;Number表示数值数据,可使NumberFormat格式化数据;用DateTime表示日期型数据,可应用DateFormat格式化数据。

    合并单元格,设置行高,列宽

    从(a,b)到(m,n)的单元格全部合并 WritableSheet.mergeCells(int a,int b,int m,int n);

//合并第一列第一行到第五列第一行的所有单元格    
 sheet.mergeCells(0,0,4,0); 

    设置列宽  WritableSheet.setColumnView(int i , int width);

//将第二行的列宽设置为50  
 sheet.setColumnView(1,50); 

    设置行高  writableSheet.setRowView(int i , int height);

//第六行行高为100  
 sheet.setRowView(5,100);

    希望本篇文章可以帮助到您!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值