POI中间件

一、poi是什么?

       poi是Apache旗下的一个中间件,主要针对 Office 格式的文件 读写的专门的工具库。主要操作excel 读写。

为什么要用POI?

  1. 可以将数据写入excel,让用户可以共享数据

  2. 作为备份数据,方便还原数据。

  3. 介绍一下另外一个中间件jxl,它也是读写excel的中间件,但是它只能读写excel2003,而poi支持操作整个office文件。
  4. 在读取大数据量时,查询数据效率要比poi低。
  5. 单sheet(工作表)存放数据量比poi要小。jxl 大概可以存放 行:65536 列:256; poi 大概可以存放 行:1048576 百万数据 列:16384;


三、使用poi中间件的几个步骤

下载页面:http://poi.apache.org/download.html


点连接


打开刚刚下载的包,再找出具体用到的jar包,然后导jar包:



操作excel的几个步骤:












相关代码:


@Test
	public void testPoi() throws Exception{
		//1.创建工作簿
		Workbook wb = new XSSFWorkbook();
		//2.创建工作表Sheet
		Sheet sheet = wb.createSheet();
		
		//3.创建行对象Row
		Row row = sheet.createRow(3); //下标从0开始
		
		//4.创建单元格对象   从0记数
		Cell cell = row.createCell(3);
		
		//5.设置单元格内容 
		cell.setCellValue("test");
		
		//6.设置单元格的样式
		CellStyle cellStyle = wb.createCellStyle();
		
		Font font = wb.createFont();//创建字体对象
		font.setFontName("叶根友毛笔行书2.0版");//设置字体名称
		font.setFontHeightInPoints((short)48);//设置字体大小
		
		cellStyle.setFont(font);//样式中添加一个字体样式
		
		cell.setCellStyle(cellStyle);
		
		//7.保存,关闭流
		OutputStream os = new FileOutputStream("C:/test/abc.xlsx");//创建一个输出流
		wb.write(os);
		os.close();
	}

利用反射写的通用的数据导出

package core.Utils;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;

import javax.servlet.ServletOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;

public class ExcelUtil {
	public static void exportExcel(List<?> objlist,ServletOutputStream out,String bigTitle,String[] objTitle,String[] objParams){
		try {
			//创建工作簿
			HSSFWorkbook wbook = new HSSFWorkbook();
			//创建工作表并设置大标题
			HSSFSheet sheet = wbook.createSheet(bigTitle);
			
		
			//大标题  创建合拼单元格对象	首行  结束行   首列  结束列  
			CellRangeAddress cra=new CellRangeAddress(0,0,0,5);
			//大标题加载合拼单元格
			sheet.addMergedRegion(cra);
			//大标题样式
			HSSFCellStyle cs = createCellStyle(wbook, (short)24);		
			//默认列宽
			sheet.setDefaultColumnWidth(25);
			HSSFRow row = sheet.createRow(0);
			HSSFCell cell=row.createCell(0);		
			cell.setCellStyle(cs);
			cell.setCellValue(bigTitle);
			
			//小标题
			HSSFCellStyle cs2 = createCellStyle(wbook, (short)16);		
			sheet.setDefaultColumnWidth(25);
			HSSFRow row2 = sheet.createRow(1);
			
			for(int i=0;i<objTitle.length;i++){
				HSSFCell cell2=row2.createCell(i);
				cell2.setCellStyle(cs2);
				cell2.setCellValue(objTitle[i]);
			}
			
			
				//把所有对象的列表传进来	然后把每个对象输出
				//反射调用传进来的类的方法	为了设置单元格的值
				
			Field[] f = new Field[objParams.length];
			
			if(objlist!=null){
				for(int j=0;j<objlist.size();j++){
					//获取每个对象
					Class<?> clazz=objlist.get(j).getClass();
					
					//把从action构建的对象每一个变量名弄到Field数组
					for(int i=0;i<objParams.length;i++){
						Field fi=clazz.getDeclaredField(objParams[i]);
						f[i]=fi;
					}
					
					//创建行 从第三行开始
					//大标题和栏目占了俩行	所以要加2
					HSSFRow row3 = sheet.createRow(j+2);
					
					for(int i=0;i<f.length;i++){

						//根据上面的Field数组里面的变量名	 通过PropertyDescriptor获取真正的类变量
						PropertyDescriptor pd=new PropertyDescriptor(f[i].getName(),clazz);
			            //获取变量的方法
						Method getMethod=pd.getReadMethod();
						
			            if(getMethod.invoke(objlist.get(j))!=null){
			            	
			            	//执行方法
			                Object s=getMethod.invoke(objlist.get(j));
//			                System.out.println("sss"+s);
			            	HSSFCell cell1=row3.createCell(i);

			                //判断是否是性别栏
			                if(i==2){
			                	//1就是男
			                	if(s.equals(1)){
			                		cell1.setCellValue("男");
			                	}else{
			                		cell1.setCellValue("女");
			                	}
			                }else{
			                	cell1.setCellValue(s.toString());
			                }
			            }
					
					}
				}
			}
				//写出
				wbook.write(out);
				wbook.close();
				out.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
	}
	@SuppressWarnings("deprecation")
	private static HSSFCellStyle createCellStyle(HSSFWorkbook wbook, short s) {
		// TODO Auto-generated method stub
		HSSFCellStyle style = wbook.createCellStyle();
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		//创建字体
		HSSFFont font = wbook.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗字体
		font.setFontHeightInPoints(s);//设置字体大小
		//加载字体
		style.setFont(font);
		return style;
	} 
	
}

action

public void exExcel(){
		
		try {
			HttpServletResponse res = ServletActionContext.getResponse();
			//设置回应的类型
			res.setContentType("application/x-execl");
			//设置响应头
			res.setHeader("Content-Disposition", "attachment;filename=" + new String("用户列表.xls".getBytes(), "ISO-8859-1"));
			
			ServletOutputStream out = res.getOutputStream();
			
			String[] objParams={"workerNo","workerName","workerSex","workerPro","workerTel","workerPwd","state"};
			String[] objTitle={"工号","职工姓名","性别","职称等级","职工手机","职工密码","状态"};
			
			List<Worker> l=workerService.findObjects();
			
			workerService.exExcel(l, out, "职工列表", objTitle, objParams);
		
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
导出来后的execl



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SOAOFFICE - 微软 OFFICE 中间件 SOAOffice 中间件是北京科翰软件为微软OFFICE量身打造的Web中间件,是Web调用Office、存取Office数据的必备中间件。SOAOffice中间件由服务器端数据组件和客户端显示控件构成。 SOAOffice 完全抛弃了传统利用Office服务器端自动化技术存取文档数据的种种弊端和缺陷,采用独创的专利技术构建了一个功能强大、简单易用的微软Office中间件平台,平台提供标准的.net和java组件接口,不但能够在线(浏览器页面)打开、编辑、保存Office文档,而且开发人员还能够以简洁的代码快速的将数据库数据动态填充到Office文档指定位置,并且也能够从Office文档中提取指定位置的数据保存到数据库。 SOAOffice提供这些强大功能的同时,服务器端并不需要安装运行Office软件。通过SOAOffice,在Web世界里,难以驯服的Word/Excel就变成了普通的、熟悉的、服务器端可调用的.Net组件、Java组件、ASP组件、PHP组件,开发人员再也不用研究复杂的Word/Excel COM自动化细节、学习复杂的VBA语法调用,也不用去应对Word/Excel死进程、系统稳定运行的问题。开发人员能够节省宝贵的精力和时间,把它投放到更重要的业务逻辑和系统架构上,而控制Office的具体技术细节交给SOAOffice去做。 SOAOffice除了提供Word/Excel动态数据填充,Word/Excel数据导入导出,Word/Excel/PowerPoint等Office文档的在线打开、编辑、保存,权限控制,只读控制等功能外,还给在线办公内置了强大的支持功能:强制痕迹保留,手写批注,圈阅签字,手写签名,电子印章、数字签名、模板套红、一键套红等。 科翰软件是国内唯一的微软Office中间件开发商,拥有卓越的自主研发实力和独创的专利技术,其产品SOAOffice不仅畅销国内,而且还远销欧美国际市场,其中世界500强美国Dover集团、可口可乐 Coca-Cola、中石油、中石化等都是SOAOffice产品的忠实客户。 SOAOFFICE中间件主要应用在Web系统下所有涉及编程调用Office的领域,例如: 1. 需要把数据库字段内容填充到Word/Excel指定位置的; 2. 需要把Word/Excel指定位置的内容提取出来保存到数据库字段的; 3. 需要动态生成指定格式的Word文档的; 4. 需要把html页面中表格导出到excel的; 5. 需要在html页面中套打票据、报表的; 6. 需要在html页面中显示复杂报表,并要求精确打印预览及打印的; 7. 需要动态生成中国式复杂格式报表的; 8. 需要在html页面中输入复杂票据的; 9. 使用COM服务器自动化技术调用Word/Excel经常产生死进程或系统不稳定的; 10.Web系统中调用Word/Excel的页面有大量并发用户访问的; 11.使用jacob、jxl、apache poi的; 12.需要在Web中调用Word/Excel,并且追求系统运行稳定、可靠的; 13.最终用户可以浏览 Word/Excel/Ppt 文档内容,但需要禁止复制、粘贴、下载、另存的; 14.需要在html页面中在线编辑Word公文的; 15.需要在协同办公中强制保留Word修改痕迹的; 16.需要在协同办公中手写批注、手写签名、加盖电子印章、模板套红的; 17.需要在新闻编辑中强制保留Word修改痕迹、手写批注、圈阅的; 18.需要在远程教育中实现试卷、作业在线批改的。 19.需要在html页面中把Word转换为pdf的; 20.需要在html页面中快速打开、显示pdf的; 21.需要在Ajax架构里调用Word/Excel的,包括服务器端和客户端Javascript都适用。 22.需要控制不同的用户在Word/Excel中不同的区域中编辑权限的; 23.需要在企业局域网内架设在线Office文档中心、知识管理的; 24.需要在web页面导入导出Excel单元格数据的; ……… SOAOFFICE中间件包括三个内置组件:SOAExcel、SOAWord、SOAPowerPoint。另外企业版还包括支持PDF文件的SOAPDF组件。 SOAOFFICE 中间件采用标准HTTP传输协议,跨平台性好,支持任意Web服务器(IIS,WebLogic,WebSphere,Apache,Tomcat,Domino等),任意服务器操作系统(Win2k, Win2003,Win2008,Linux,Unix等),任意数据库(Access,SQL Server,Oracle,MySQL,DB2,Sybase等),以及任意WEB编程语言和Web架构(C#,Java,VB.Net,PHP,DOMINO,JSP,ASP,J2EE,ASP.NET,Ajax等)。SOAOFFICE同时支持C/S方式的编程和其他支持ActiveX的容器,您可以在VB,Delphi以及C++ Builder中使用本中间件,快速创建C/S结构的应用。 SOAOFFICE中间件是一个国际化产品,支持多种界面语言:简体中文、繁体中文、英语、日语、法语、德语等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值