`
jwen
  • 浏览: 62348 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[讨论]poi jxl 操作excel出报表

    博客分类:
  • java
阅读更多
最近学习java 通过poi jxl 等API 来操作Excel 出报表
有几点感想,在基本的功能方面(数据填充,基本格式绘制)感觉很简单
一下是一个绘制简单报表的方法:
	public static void toExcel(EpmEqRmaBO bo,File fileAddress)
	{ 
		String temp="";
		DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		I18NInfoService i18NInfoService = new I18NInfoService();
		try
		{
			//构建Workbook对象, 只读Workbook对象
			jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(fileAddress);
			jxl.write.WritableSheet ws = wwb.createSheet("Sheet 1", 0); 
			  //设置列宽
			  ws.setColumnView(0,6);
			  ws.setColumnView(1,12);
			  ws.setColumnView(2,12);
			  ws.setColumnView(3,12);
			  ws.setColumnView(4,12);
			  ws.setColumnView(5,20); 
			  ws.setColumnView(6,12);
			  ws.setColumnView(7,12);
			  ws.setColumnView(8,16);
			  ws.setColumnView(9,12);
			  //设置行高
			  ws.setRowView(0,600);
			  ws.setRowView(1,400);
			  ws.setRowView(2,300); 
			  ws.setRowView(4,300);
			  ws.setRowView(5,300);
			  ws.setRowView(6,300);

			//大标题的格式
			WritableFont font1 =  new  WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD);
			WritableCellFormat title1 = new  WritableCellFormat(font1); 
			title1.setAlignment(jxl.format.Alignment.CENTRE); //水平对齐
			//小标题的格式
			WritableFont font2 =  new  WritableFont(WritableFont.TIMES, 14 ,WritableFont.BOLD);
			WritableCellFormat title2 = new  WritableCellFormat(font2); 
			title2.setAlignment(jxl.format.Alignment.CENTRE); //水平对齐			
			//次标题的格式
			WritableFont font3 =  new  WritableFont(WritableFont.TIMES, 10 ,WritableFont.NO_BOLD);
			WritableCellFormat title3 = new  WritableCellFormat(font3); 
			title3.setAlignment(jxl.format.Alignment.LEFT); //水平对齐			
			//表格栏目的格式
			WritableFont font4 =  new  WritableFont(WritableFont.TIMES, 10 ,WritableFont.NO_BOLD);
			WritableCellFormat title4 = new  WritableCellFormat(font4); 
			title4.setAlignment(jxl.format.Alignment.CENTRE); //水平对齐
			title4.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直对齐
			title4.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN); //设置边框
			
			//设置数据类的格式
			WritableFont font5=  new  WritableFont(WritableFont.TIMES, 12 ,WritableFont.NO_BOLD);
			WritableCellFormat cell = new  WritableCellFormat(font5); 
			cell.setAlignment(jxl.format.Alignment.CENTRE); //水平对齐
			cell.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //垂直对齐
			cell.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN); //设置边框

			jxl.write.Label labelC = new jxl.write.Label(0, 0, "故障设备送修单",title1);
			ws.addCell(labelC); 
			ws.mergeCells(0,0,9,0); 
			labelC =new jxl.write.Label(0,1 , "Return Material Authorization Request (RMA)",title2);
			ws.addCell(labelC);
			ws.mergeCells(0,1,9,1);   
           
			if(bo.getEpmEqRmaVO().getCreatedTime()!=null && !"".equals(bo.getEpmEqRmaVO().getCreatedTime()) && bo.getEpmEqRmaVO().getCreatedTime().length()>10)
			{
				labelC = new jxl.write.Label(0,2 , "联系人:"+bo.getCustPersonName()+"             填单日期:"+bo.getEpmEqRmaVO().getCreatedTime().substring(0,10),title3);
			}
			else
			{
				labelC = new jxl.write.Label(0,2 , "联系人:"+bo.getCustPersonName()+"             填单日期:"+bo.getEpmEqRmaVO().getCreatedTime(),title3);
			} 
			ws.addCell(labelC);  
			ws.mergeCells(0,2,9,2);   
			
			//电话:                   传真:                   EMAIL:    此栏由xx填写:                           

			labelC = new jxl.write.Label(0,3 , "电话:" + bo.getOfficePhone()+"       传真:" + bo.getFax()+"       EMAIL:" + bo.getEmail(),title3);
			ws.addCell(labelC);
			ws.mergeCells(0,3,9,3);   
	 
			
			//用户单位:       邮编:        RMA确认号:       
			labelC = new jxl.write.Label(0,4 , "用户单位:" + bo.getCustName()+"       邮编:" + bo.getPostCode(),title3);
			ws.addCell(labelC);
			ws.mergeCells(0,4,6,4);
			//用户单位:       邮编:        RMA确认号:       
			labelC = new jxl.write.Label(7,4 , "RMA确认号:" + bo.getEpmEqRmaVO().getRmaNo(),title3);
			ws.addCell(labelC);
			ws.mergeCells(7,4,9,4);				
			//收货地址:        确认日期:           年       月            
			
			//联系人的地址改为收货地址
			temp =  
				i18NInfoService.getInfo(
						" ECC_CUST_PERSON_INFO p",
						" p.communication_address",
						" rownum=1 and  p.id=" + bo.getEpmEqRmaVO().getCustPersonId());
			
			//labelC = new jxl.write.Label(0,5 , "收货地址:" + temp); 
			//ws.addCell(labelC);
			if(bo.getEpmEqRmaVO().getEvaDate()!=null && !"".equals(bo.getEpmEqRmaVO().getEvaDate()) && bo.getEpmEqRmaVO().getEvaDate().length()>10)
			{
				labelC = new jxl.write.Label(0,5 , "收货地址:" + temp,title3);
				ws.addCell(labelC); 
				ws.mergeCells(0,5,6,5);
				labelC = new jxl.write.Label(7,5 , "确认日期:" + bo.getEpmEqRmaVO().getEvaDate().substring(0,10),title3);
			}
			else
			{
				labelC = new jxl.write.Label(0,5 , "收货地址:" + temp,title3);
				ws.addCell(labelC); 
				ws.mergeCells(0,5,6,5);
				labelC = new jxl.write.Label(7,5 , "确认日期:" + bo.getEpmEqRmaVO().getEvaDate(),title3); 
			}
			ws.addCell(labelC); 
			ws.mergeCells(7,5,9,5);
			
			//以下栏目由用户填写
			labelC = new jxl.write.Label(0,6 , "以下栏目由用户填写",title4); 
			ws.addCell(labelC); 
			ws.mergeCells(0,6,7,6); 
			labelC = new jxl.write.Label(8,6 , "",title4); 
			ws.addCell(labelC); 
			ws.mergeCells(8,6,9,6);
			//序号	故障日期	产品型号	设备名称	硬件版本	序列号 	设备服务号	故障描述	受理意见	备注说明
			labelC = new jxl.write.Label(0,7 , "序号",title4); 
			ws.addCell(labelC);
			labelC = new jxl.write.Label(1,7 , "故障日期",title4); 
			ws.addCell(labelC);
			labelC = new jxl.write.Label(2,7 , "产品型号",title4); 
			ws.addCell(labelC);
			labelC = new jxl.write.Label(3,7 , "设备名称",title4); 
			ws.addCell(labelC);
			labelC = new jxl.write.Label(4,7 , "硬件版本",title4); 
			ws.addCell(labelC);
			labelC = new jxl.write.Label(5,7 , "序列号",title4); 
			ws.addCell(labelC);
			labelC = new jxl.write.Label(6,7 , "设备服务号",title4); 
			ws.addCell(labelC);
			labelC = new jxl.write.Label(7,7 , "故障描述",title4); 
			ws.addCell(labelC);
			labelC = new jxl.write.Label(8,7 , "受理意见",title4); 
			ws.addCell(labelC);
			labelC = new jxl.write.Label(9,7 , "备注说明",title4); 
			ws.addCell(labelC);				
			int y=8;
			//setRamBoardList  明细列表迭带
			for(int i=0;i<bo.getRamBoardList().size();i++)
			{ 
				ReturnFormItemBO rbo = new ReturnFormItemBO();
				
				rbo = (ReturnFormItemBO)bo.getRamBoardList().get(i);
				
				ReturnFormItemVO rvo = rbo.getReturnFormItemVO(); 
				
                //序号	故障日期  	产品型号	设备名称	硬件版本	序列号 	设备服务号	故障描述	受理意见	备注说明
				labelC = new jxl.write.Label(0,y , String.valueOf(i+1),title4); 
				ws.addCell(labelC);

				if(rvo.getRmaErrorDate()!=null && !"".equals(rvo.getRmaErrorDate()) && rvo.getRmaErrorDate().length()>0)
				{
					labelC = new jxl.write.Label(1,y , rvo.getRmaErrorDate(),title4); 
				}
				else
				{
					labelC = new jxl.write.Label(1,y , "",title4); 
				} 
				ws.addCell(labelC);
				
				labelC = new jxl.write.Label(2,y , rvo.getProductmodel(),title4); 
				ws.addCell(labelC);
				
				labelC = new jxl.write.Label(3,y , rvo.getBoardname(),title4); 
				ws.addCell(labelC);
				
				labelC = new jxl.write.Label(4,y , rvo.getBoardedition(),title4); 
				ws.addCell(labelC);
				
				labelC = new jxl.write.Label(5,y , rvo.getBoardid(),title4); 
				ws.addCell(labelC);
				
				labelC = new jxl.write.Label(6,y , rvo.getFacilityServiceNO(),title4); 
				ws.addCell(labelC);
				
				labelC = new jxl.write.Label(7,y , rvo.getError(),title4); 
				ws.addCell(labelC);
				
				if(rvo.getRmaEvaFlag()!=null && "Y".equals(rvo.getRmaEvaFlag()))
				{ 
					labelC = new jxl.write.Label(8,y , "√",title4); 
					ws.addCell(labelC);
				}
				else
				{
					labelC = new jxl.write.Label(8,y , "×",title4); 
					ws.addCell(labelC);
				}
				
				labelC = new jxl.write.Label(9,y , rvo.getRmaEvaDevice(),title4); 
				ws.addCell(labelC);	
				y++;
			}
			//注意:1. 请将此表附在送修的故障硬件包装箱内。
			//2. 请不要把不受理的故障硬件送修。 
			//3. 请将此表附在送修的故障硬件包装箱内。

			//返修中心
			labelC = new jxl.write.Label(0,y , ""); 
			ws.addCell(labelC);
			ws.mergeCells(0,y,9,y);
			y++;
			
			//返修中心
			labelC = new jxl.write.Label(0,y , "注意:",title3);
			ws.addCell(labelC); 
			labelC = new jxl.write.Label(1,y , "1. 请将此表附在送修的故障硬件包装箱内。 ",title3);
			ws.addCell(labelC);
			ws.mergeCells(1,y,9,y);
			y++;
			
			//返修中心
			labelC = new jxl.write.Label(1,y , "2. 请不要把不受理的故障硬件送修。  ",title3);
			ws.addCell(labelC);
			ws.mergeCells(1,y,9,y);
			y++;
			
			//返修中心  
			labelC = new jxl.write.Label(1,y , "3. 请将此表附在送修的故障硬件包装箱内。 ",title3);       
			ws.addCell(labelC);
			ws.mergeCells(1,y,9,y);
			y++;
			

			//返修中心
			labelC = new jxl.write.Label(0,y , "/返修中心 ",title3);
			ws.addCell(labelC);
			ws.mergeCells(0,y,9,y);
			y++;

			labelC = new jxl.write.Label(0,y , "地址: 高新技术产业园科技南路通讯维修/返修中心B2座6楼      邮政编码: 518057 ",title3);
			ws.addCell(labelC);
			ws.mergeCells(0,y,9,y);
			y++;

			//返修中心
			labelC = new jxl.write.Label(0,y , "电话: 0755-26771776                                              传真: 0755-26770177 ",title3);
			ws.addCell(labelC);
			ws.mergeCells(0,y,9,y);
			y++;

			//返修中心
			labelC = new jxl.write.Label(0, y ,   "Email: RRCN@zzz.com.cn ",title3);
			ws.addCell(labelC);
			ws.mergeCells(0,y,9,y);

			wwb.write();
			wwb.close(); 

		}
		catch (Exception e)
		{
			e.printStackTrace();
		} 
	
	} 


但要绘制下面的模板感觉却很难:
要求: 整个版面事固定的,要求需设置边框样式,内部线格式,
      要求设置页边距,整个列表的长宽.

      要求数据内容的填充自动适应单元格大小,尽量排版美观(单元格固定大小)
分享到:
评论
2 楼 dovecat 2007-04-20  
在workbook中可以设置样式的模板.比用代码设置要方便多了.
1 楼 jwen 2007-04-19  
大家有检验的介绍下.

相关推荐

    poi jxl 生成EXCEL 报表

    poi jxl 生成EXCEL 报表 POI 用的JAR poi-3.6-20091214.jar jxl 用到的jar jxl-2.6.jar

    Java通过POI和JXL给Excel动态添加水印

    java 通过JXL架包,给excel文件添加水印,水印内容可自定义

    java报表JXL和POI打印设置 java 生成excel 设置打印

    java报表JXL和POI打印设置 设置打印,非常好用 一般文档没有 绝版

    dwr结合jQuery实现Ajax技术 ,Oracle作为后台数据库,jxl + poi报表

    dwr结合jQuery实现Ajax技术 ,Oracle作为后台数据库,jxl + poi报表

    JAVA导出Excel报表之jxl插件及实例源码

    jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的, 并不依赖Windows...

    EasyExcel(生成Excel报表)基本操作.pdf

    Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及...

    excel 报表导出 模块框架 jar

    个人写的excel模板导出jar, 采用的是在excel中配置${\w-\w}类型标签,在 IExcelHandle接口集成类中实现具体的excel中报表值的计算. 提供源码和jar,其中有测试类和测试excel. 使用了java依赖倒置,将输出...用的jxl 非poi

    自定义Excel的上传下载(解析Excel文件)

    实现Excel的上传和下载 存在两种格式的上传和下载,分别对应POI和JXL 可以实现根据Excel模板导出,自定义Excel样式导入 形成自定义的Excel报表等功能。项目为Maven项目,JDK采用1.8

    Chat2DB 智能数据库客户端,数据报表工具,自然语言生成SQL,生成报表

    Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及...

    Android操作Excel文件的功能实现

    Android中操作Excel文件导出报表时主要采用开源库jxl,最早用在java上,但也可用于Android。与之类似的POI,因为依赖库众多,所以只能用于java,而不能用于Android。 使用jxl需要在Android工程中导入jxl.jar包,jxl...

    Java_Web开发实战1200例第1卷.part2

    21.1 应用JXL组件操作Excel 776 21.2 应用POI组件操作Excel 807 第22章 报表与打印 829 22.1 Web打印 830 22.2 利用Word打印报表 833 22.3 利用Excel打印报表 838 22.4 应用WebBrowser+CSS套打邮寄 22.5 打印库存...

    Java_Web开发实战1200例第1卷.part3

    21.1 应用JXL组件操作Excel 776 21.2 应用POI组件操作Excel 807 第22章 报表与打印 829 22.1 Web打印 830 22.2 利用Word打印报表 833 22.3 利用Excel打印报表 838 22.4 应用WebBrowser+CSS套打邮寄 22.5 打印库存...

    企业信息管理系统

    该系统涵盖了企业管理的各个方面,使用众多J2EE的新技术,如javamail,ajax,displaytag分页,jxl,poi 导出excel, word 报表 等等。

    15个最实用的javaWeb开发工具代码.zip

    15个最实用的javaWeb开发...jxl导入excel log4j日志配置 md5密码加密 poi报表 FCK文本编辑器 ajax校验 session失效自动跳转到登录页面 vilidate验证 二级缓存 分页 文件上传进度条 权限配置文件(dom4j) 验证码+记住我

    jasperreports-6.0.0所有架包

    JasperReport报表开发目前最新版本6.0的所有架包,可开发excel,xml,html,doc,pdf等报表,包含: jasperreports-6.0.0.jar jasperreports-fonts-6.0.0.jar jasperreports-javaflow-6.0.0.jar jxl-2.6.10.jar log4j-...

    soaoffice示例代码

    使用jacob、jxl、apache poi的; 12.需要在Web中调用Word/Excel,并且追求系统运行稳定、可靠的; 13.最终用户可以浏览 Word/Excel/Ppt 文档内容,但需要禁止复制、粘贴、下载、另存的; 14.需要在html页面中在线...

    jexcelapi2_5_5.chm

    在实际WEB项目开发过程中,常常需要我们开发WEB报表的功能,两种常用的处理Excel表格的开源解决方案:Apache POI和JExcelApi(Jxl)的基本应用。

    SOAOFFICE - 微软 OFFICE 中间件

    11.使用jacob、jxl、apache poi的; 12.需要在Web中调用Word/Excel,并且追求系统运行稳定、可靠的; 13.最终用户可以浏览 Word/Excel/Ppt 文档内容,但需要禁止复制、粘贴、下载、另存的; 14.需要在html页面中在线...

    java开发常用jar包

    poi.jar:Apache的操作数据转换的类库,能导入和到处Excel,与jxl.jar功能重复。 mysql-connector-java-5.1.6-bin.jar mysql驱动包 ojdbc5.jar jdbc驱动包 iTextAsian.jar 中文显示问题 jdt-compiler-3.1.1....

Global site tag (gtag.js) - Google Analytics