Java生成excel文件-本地生成excel文件和在线生成excel及下载--jxl

下面我们来讲一下使用Java生成excel文件,一般有2种方式,一是使用jxl,还有是使用poi,今天我们主要了解一下使用jxl操作在本地生成excel文件

下面是使用jxl在本地生成excel文件的方法

	/**
	 * java导出excel方法
	 * @param list 表内容数据
	 * @param sheetName 第0个表工作名称
	 * @param columns 表头数据
	 * @return flag 
	 */
	  public int exportExcel(List<User> list, String sheetName,List<String> columns) {  
	        int flag = 0;  
	        //声明工作簿jxl.write.WritableWorkbook  
	        WritableWorkbook wwb;  
	        try {  
	            //在本地创建一个excel文件,如果文件存在每次都会生成新的覆盖原来的文件,
	        	//这样就永远只生成一个excel,而不占用服务器太多空间
	        	 File file = new File("E://TTest.xls");
	        	 if(!file.exists()){
	        		 file.createNewFile();
	        	 }
	            wwb = Workbook.createWorkbook(file);  
	            /* 
	             * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表 
	             * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样 
	             * 代码中的"0"就是sheet1、其它的一一对应。 
	             * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置 
	             */  
	            WritableSheet ws = wwb.createSheet(sheetName, 0);  
	              
	            SheetSettings ss = ws.getSettings();  
	            ss.setVerticalFreeze(1);//冻结表头  
	              
	            WritableFont font1 =new WritableFont(WritableFont.createFont("微软雅黑"), 10 ,WritableFont.BOLD);  
	            WritableFont font2 =new WritableFont(WritableFont.createFont("微软雅黑"), 9 ,WritableFont.NO_BOLD);  
	            WritableCellFormat wcf = new WritableCellFormat(font1);  
	            WritableCellFormat wcf2 = new WritableCellFormat(font2);  
	            WritableCellFormat wcf3 = new WritableCellFormat(font2);//设置样式,字体  
	  
	            //创建单元格样式  
	            //WritableCellFormat wcf = new WritableCellFormat();  
	  
	            //背景颜色  
	            wcf.setBackground(jxl.format.Colour.YELLOW);  
	            wcf.setAlignment(Alignment.CENTRE);  //平行居中  
	            wcf.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中  
	            wcf3.setAlignment(Alignment.CENTRE);  //平行居中  
	            wcf3.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中  
	            wcf3.setBackground(Colour.LIGHT_ORANGE);  
	            wcf2.setAlignment(Alignment.CENTRE);  //平行居中  
	            wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中  
	  
	            /* 
	             * 这个是单元格内容居中显示 
	             * 还有很多很多样式 
	             */  
	            wcf.setAlignment(Alignment.CENTRE);  
	  
	            //判断一下表头数组是否有数据  
	            if (columns != null && columns.size() > 0) {  
	  
	                //循环写入表头  
	                for (int i = 0; i < columns.size(); i++) {  
	  
	                    /* 
	                     * 添加单元格(Cell)内容addCell() 
	                     * 添加Label对象Label() 
	                     * 数据的类型有很多种、在这里你需要什么类型就导入什么类型 
	                     * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label 
	                     * Label(i, 0, columns[i], wcf) 
	                     * 其中i为列、0为行、columns[i]为数据、wcf为样式 
	                     * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中 
	                     */  
	                    ws.addCell(new Label(i, 0, columns.get(i), wcf));  
	                }  
	     
	                //判断表中是否有数据  
	                if (list != null && list.size() > 0) {  
	                    //循环写入表中数据  
	                		int i=0;
	                        for(User user:list){
	                        	//括号中第一个参数代表列,第二个参数代表行,第三个参数代表内容
	                        	//下面第一个也就是第0列的第1行(第0行做了表头)的内容为userName。
	                            ws.addCell(new Label(0,i+1,user.getUsername()));  
	                            ws.addCell(new Label(1,i+1,user.getCnName()));
	                            ws.addCell(new Label(2,i+1,user.getUserType()));
	                            if(user.getRoleList()==null){
	                            	ws.addCell(new Label(3,i+1,""));
	                            }else{
	                            	ws.addCell(new Label(3,i+1,user.getRoleList().get(0).getName()));
	                            }
	                            if(user.getDept()==null){
	                            	ws.addCell(new Label(4,i+1,""));
	                            }else{
	                            	ws.addCell(new Label(4,i+1,user.getDept().getName()));
	                            }
	                            if(user.getDept()==null){
	                            	ws.addCell(new Label(5,i+1,""));
	                            }else{
	                            	ws.addCell(new Label(5,i+1,user.getDept().getName()));
	                            }
	                            ws.addCell(new Label(6,i+1,user.getStatus()));
	                            i++;
	                        }  
	                 
	                }else{  
	                    flag = -1;  
	                }  
	  
	                //写入Exel工作表  
	                wwb.write();  
	  
	                //关闭Excel工作薄对象   
	                wwb.close();   
	            }  
	        }catch (IllegalStateException e) {  
	            System.err.println(e.getMessage());  
	        }  
	        catch (Exception ex) {  
	            flag = 0;  
	            ex.printStackTrace();  
	        }  
	  
	        return flag;  
	    }  
	  



下面在web在线生成excel,然后直接下载下来

/**
	 * java导出excel方法
	 * @param list 表内容数据
	 * @param sheetName 第0个表工作名称
	 * @param columns 表头数据
	 * @return flag 
	 */
	  public int exportExcel(List<User> list, String sheetName,List<String> columns) {  
	        int flag = 0;  
	        //声明工作簿jxl.write.WritableWorkbook  
	        WritableWorkbook wwb;  
	        ByteArrayOutputStream stream = new ByteArrayOutputStream();
			InputStream is = new ByteArrayInputStream(stream.toByteArray());
	        try {  
	            //在本地创建一个excel文件,如果文件存在每次都会生成新的覆盖原来的文件,
	        	//这样就永远只生成一个excel,而不占用服务器太多空间
	        
	            wwb = Workbook.createWorkbook(stream);  
	            /* 
	             * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表 
	             * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样 
	             * 代码中的"0"就是sheet1、其它的一一对应。 
	             * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置 
	             */  
	            WritableSheet ws = wwb.createSheet(sheetName, 0);  
	              
	            SheetSettings ss = ws.getSettings();  
	            ss.setVerticalFreeze(1);//冻结表头  
	              
	            WritableFont font1 =new WritableFont(WritableFont.createFont("微软雅黑"), 10 ,WritableFont.BOLD);  
	            WritableFont font2 =new WritableFont(WritableFont.createFont("微软雅黑"), 9 ,WritableFont.NO_BOLD);  
	            WritableCellFormat wcf = new WritableCellFormat(font1);  
	            WritableCellFormat wcf2 = new WritableCellFormat(font2);  
	            WritableCellFormat wcf3 = new WritableCellFormat(font2);//设置样式,字体  
	  
	            //创建单元格样式  
	            //WritableCellFormat wcf = new WritableCellFormat();  
	  
	            //背景颜色  
	            wcf.setBackground(jxl.format.Colour.YELLOW);  
	            wcf.setAlignment(Alignment.CENTRE);  //平行居中  
	            wcf.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中  
	            wcf3.setAlignment(Alignment.CENTRE);  //平行居中  
	            wcf3.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中  
	            wcf3.setBackground(Colour.LIGHT_ORANGE);  
	            wcf2.setAlignment(Alignment.CENTRE);  //平行居中  
	            wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);  //垂直居中  
	  
	            /* 
	             * 这个是单元格内容居中显示 
	             * 还有很多很多样式 
	             */  
	            wcf.setAlignment(Alignment.CENTRE);  
	  
	            //判断一下表头数组是否有数据  
	            if (columns != null && columns.size() > 0) {  
	  
	                //循环写入表头  
	                for (int i = 0; i < columns.size(); i++) {  
	  
	                    /* 
	                     * 添加单元格(Cell)内容addCell() 
	                     * 添加Label对象Label() 
	                     * 数据的类型有很多种、在这里你需要什么类型就导入什么类型 
	                     * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label 
	                     * Label(i, 0, columns[i], wcf) 
	                     * 其中i为列、0为行、columns[i]为数据、wcf为样式 
	                     * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中 
	                     */  
	                    ws.addCell(new Label(i, 0, columns.get(i), wcf));  
	                }  
	     
	                //判断表中是否有数据  
	                if (list != null && list.size() > 0) {  
	                    //循环写入表中数据  
	                		int i=0;
	                        for(User user:list){
	                        	//括号中第一个参数代表列,第二个参数代表行,第三个参数代表内容
	                        	//下面第一个也就是第0列的第1行(第0行做了表头)的内容为userName。
	                            ws.addCell(new Label(0,i+1,user.getUsername()));  
	                            ws.addCell(new Label(1,i+1,user.getCnName()));
	                            ws.addCell(new Label(2,i+1,user.getUserType()));
	                            if(user.getRoleList()==null){
	                            	ws.addCell(new Label(3,i+1,""));
	                            }else{
	                            	ws.addCell(new Label(3,i+1,user.getRoleList().get(0).getName()));
	                            }
	                            if(user.getDept()==null){
	                            	ws.addCell(new Label(4,i+1,""));
	                            }else{
	                            	ws.addCell(new Label(4,i+1,user.getDept().getName()));
	                            }
	                            if(user.getDept()==null){
	                            	ws.addCell(new Label(5,i+1,""));
	                            }else{
	                            	ws.addCell(new Label(5,i+1,user.getDept().getName()));
	                            }
	                            ws.addCell(new Label(6,i+1,user.getStatus()));
	                            i++;
	                        }  
	                 
	                }else{  
	                    flag = -1;  
	                }  
	  
	                //写入Exel工作表  
	                wwb.write();  
	  
	                //关闭Excel工作薄对象   
	                wwb.close();
	                is = new ByteArrayInputStream(stream.toByteArray());
	                String fileName=new String("用户信息.xls".getBytes("GBK"),"ISO8859_1");
					Filedownload.save(is, "application/x-download", fileName);
	            }  
	        }catch (IllegalStateException e) {  
	            System.err.println(e.getMessage());  
	        }  
	        catch (Exception ex) {  
	            flag = 0;  
	            ex.printStackTrace();  
	        }  
	  
	        return flag;  
	    }  
	  



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值