利用Java生成Excel文件一、POI简介POI是apache免费的开源插件,它主要提供对Microsoft产品编程的API。JakartaPOI中最成熟的API就是HSSF。通过HSSF可以用Java代码来读取、写入和修改Excel文件。HSSF(HorribleSpreadsheetFormat)是读写MicrosoftExcel的API。HDF(HorribleDocumentFormat)是读写MicrosoftWor97的API。引入包:importorg.apache.poi.hssf.usermodel.*;importorg.apache.poi.hssf.util.Region;二、数据写入的创建过程把数据写入Excel中必须经过以下步骤。(1)创建workbook对象HSSFWorkbookworkbook=newHSSFWorkbook();(2)通过workbook对象创建工作区对象并命名为testexcelHSSFSheetsheet=workbook.createSheet(“testexcel“);(3)由工作区对象创建行对象HSSFRowrow=sheet.createRow(0);(4)由行对象创建单元格对象HSSFCellcell=row.createCell((short)1);(5)把数据写入将单元格里Cell.setCellValue(“thisistitle”);(6)保存Excel文档//importjava.io.FileOutputStream;FileOutputStreamout=FileOutputStream(“c:\\test.xls”);workbook.write(out);//将Excel文档保存到C盘根目录下test.xlsout.close();三、如何设置字体和单元格样式通过HSSFFont和HSSFCellStyle类设置数据在Excel中显示的字体、颜色、大小和单元格样式。设置过程如下。(1)通过HSSFFont类创建字体对象HSSFFontfont=workbook.createFont();//由workbook创建字体(2)通过font来设置字体属性font.setFontHeightPoints((short)8);//设置字体属性font.setFontHeight((short)HSSFFont.BOLDWEIGHT_NORMAL);//设置字体属性font.setColor((short)(HSSFFont.COLOR_RED));//设置字体属性(3)通过HSSFCellStyle类创建单元格样式对象HSSFCellStylecellstyle=workbook.createCellStyle();//由workbook创建单元格样式(4)通过cellstyle来设置样式属性cellstyle.setFont(font);//设置样式属性(5)通过HSSFCell类创建单元格对象HSSFRowrow=workbook.createRow((short)0);HSSFCellcell=row.createCell((short)1);(6)将样式应用于单元格对象cell.setCellStyle(cellstyle);//使用已创建的样式四、读取Excel单元格中的数据要读取单元格中的数据必须经过以下步骤(1)创建对Excel文档的引用对象获取C盘根目录下的test电子表格文件的引用对象workbook。HSSFWorkbookworkbook=newHSSFWorkbook(newFileInputStream(“C:\\test.xls”));(2)获取工作区表对象通过workbook对象获得工作区test表对象。HSSFSheetsheet=workbook.getSheet(“test”);如果工作区未知,可以通过工作区的缺省标识”0”,来获得表对象。HSSFSheetsheet=workbook.getSheetAt(0);(3)获取行对象通过工作区表对象sheet来获取行对象。HSSFRowrow=sheet.getRow(0);(4)获取单元格对象通过行对象row来获得单元格对象。(5)读取单元格中的数据通过单元格对象cell的getStringCellValue()来读取单元格中的数据。cell.getStringCellValue();五、如何在Excel表格中显示数据Excel文档由行元素和列元素构成,把数据按照整行整列显示,可以通过循环控制实现。关键代码如下。inti=0;while(table.next()){HSSFRowdataRow=sheet.createRow((short)(i+2));//创建一行for(intj=0;j9;j++){HSSFCellcell=dataRow.createCell((short)j);//创建单元格cell.styleCellStyle(dataStyle);//设置单元格样式Stringdata=table.getString(j+2);//取出一条记录的记录项目cell.setCellValue(data);//把数据写到单元格里}i++;}开发过程一、创建实现类当用户单击“查看”时,会将所有人员所有人员信息显示到Excel中。这过程分两步完成,第一步,从数据库中将数据查出来并保存在SqlRowSet集合中;第二步,将集合中数据显示在Excel电子表格中。(1)从数据库取出数据取数据出UserXslController类完成。在handleRequest方法中,先创建连接,然后向数据库发送SQL语句查询出结果,这里的返回结果类型为SqlRowSet,它可以类似于ResultSet那样遍历结果集。将集合放在Map键值对里,传给UserXslView类。代码如下。UserXslController.javapublicclassUserXslControllerimplementsController{privateMapmsg=newHashMap();publicModelAndViewhandleRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwException{Stringname=request.getParameter(“selectname”);Stringclassname=newString(name.getBytes(“ISO_8859_1”).”gb2312”);msg.put(“title”,classname+”学生详细信息”);//获得数据源DriverManagerDataSourcedmds=newDriverManagerDataSource();//获得urldmds.setDriverClassName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);//获得驱动dmds.setUrl(“jdbc:Microsoft:sqlservler://127.0.0.1:1433;DatabaseName=DB_Excel12”);dmds.setUsername(“sa”);//数据库用户名dmds.setPassword(“sa“);//数据库密码JdbcTemplatejtl=newJdbcTemplate(dmds);//将数据源JdbcTemplate模板//使用queryForRowSet方法查询返回结果为SqlRowSet类型SqlRowSetlist=jtl.queryForRowSet(“SELECTstu_id,name,sex,age,sfzhm,csrq,zzmm.jtdh,jtdz,jkzkFROMtab_stuinfowhereclassid=’”+classname+”’”);msg.put(“table”,list);//将结果集存到map中returnnewModelAndView(“customxslview”,msg);}}(2)在Excel中显示数据首先继承Sping提供的AbstractExcelView类,并且在buildExcelDocument()方法中编写显示代码。参数model是Map类型,用于接收UserXslController类携带的数据。获昨数据后,先设置标题、表头字体和样式,然后将model里的数据循环写入Excel文档显示。程序代码如下。UserXslView.javapublicclassUserXslViewextendsAbstractExcelView{protectedvoidbuildExcelDocument(Mapmodel,HSSFWorkbookworkbook,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{SqlRowSettable=(SqlRowSet)model.get(“table”);//取得数据集合Stringtitle=model.get(“title”).toString();//取得标题HSSFSheetsheet=workbook.createSheet(title);//创建工作区HSSFRowrow_title=sheet.createRow(0);//创建行对象HSSFFonttitle_font=workbook.createFont();//创建标题的字体title_font.setFontHeightInPoints((short)8);//设置标题字体属性title_font.setFontHeight((short)HSSFFont.BOLDWEIGHT_NORMAL);//同上title_font.setColor((short)(HSSFFont.COLOR_RED));//设置字体颜色HSSFCellStyletitle_style=workbook.createCellStyle();//创建样式title_style.setFont(title_font);//设置标题样式属性HSSFCellcell_title=row_title.createCell((short)1);//创建单元格对象cell_title.setCellStyle(title_style);//设置单元格样式cell_title.setCellValue(title);//将标题写到Excel表格里//以上为标题的字体和样式的属性设置Stringtitles[]={“学生姓名”,”性别”,”年龄”,”身份证号”,”出生日期”,”政治面貌”,”家庭电话”,”家庭地址”,”健康状况”};HSSFRowrow=sheet.createRow((short)1);//创建行HSSFCellStyleitems_style=workbook.createCellStyle();//创建样式Items_style.setAlignment((short)HSSFCellStyle.ALIGN_CENTER);//设置表头样式HSSFFontcelltbnamefont=workbook.createFont();//创建字体celltbnamefont.setFontHeightInPoints((short)10);//设置表头字体属性celltbnamefont.setColor((short)(HSSFFont.COLOR_RED));//设置表头字体颜色items_style.setFont(celltbnamefont);items_style.setWrapText(true);for(inti=0;ititles.length;i++){HSSFCellcell=row.createCe