版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.利用java生成excel文件一、 poi简介poi是apache免费的开源插件,它主要提供对microsoft产品编程的api。jakarta poi中最成熟的api就是hssf。通过hssf可以用java代码来读取、写入和修改excel文件。hssf(horrible spreadsheet format)是读写microsoft excel的api。hdf(horrible document format)是读写microsoft wor 97的api。引入包:import org.apache.poi.hssf.usermodel.*; import org.apache.poi.h
2、ssf.util.region;二、 数据写入的创建过程把数据写入excel中必须经过以下步骤。(1) 创建workbook对象hssfworkbook workbook=new hssfworkbook();(2) 通过workbook对象创建工作区对象并命名为test excelhssfsheet sheet=workbook.createsheet(“test excel“);(3) 由工作区对象创建行对象hssfrow row=sheet.createrow(0);(4) 由行对象创建单元格对象hssfcell cell=row.createcell(short)1);(5) 把数据写
3、入将单元格里精品.cell.setcellvalue(“this is title”);(6) 保存excel文档/import java.io.fileoutputstream;fileoutputstream out=fileoutputstream(“c:test.xls”);workbook.write(out);/将excel文档保存到c盘根目录下test.xlsout.close();三、 如何设置字体和单元格样式通过hssffont和hssfcellstyle类设置数据在excel中显示的字体、颜色、大小和单元格样式。设置过程如下。(1) 通过hssffont类创建字体对象hss
4、ffont font=workbook.createfont();/由workbook创建字体(2) 通过font来设置字体属性font.setfontheightpoints(short)8);/设置字体属性font.setfontheight(short)hssffont.boldweight_normal);/设置字体属性font.setcolor(short)(hssffont.color_red);/设置字体属性(3) 通过hssfcellstyle类创建单元格样式对象hssfcellstyle cellstyle=workbook.createcellstyle();/由workb
5、ook创建单元格样式(4) 通过cellstyle来设置样式属性cellstyle.setfont(font);/设置样式属性(5) 通过hssfcell类创建单元格对象精品.hssfrow row=workbook.createrow(short)0);hssfcell cell=row.createcell(short)1);(6) 将样式应用于单元格对象cell.setcellstyle(cellstyle);/使用已创建的样式四、 读取excel单元格中的数据要读取单元格中的数据必须经过以下步骤(1) 创建对excel文档的引用对象获取c盘根目录下的test电子表格文件的引用对象wor
6、kbook。hssfworkbook workbook=new hssfworkbook(new fileinputstream(“c:test.xls”);(2) 获取工作区表对象通过workbook对象获得工作区test表对象。hssfsheet sheet=workbook.getsheet(“test”);如果工作区未知,可以通过工作区的缺省标识”0”,来获得表对象。hssfsheet sheet=workbook.getsheetat(0);(3) 获取行对象通过工作区表对象sheet来获取行对象。hssfrow row=sheet.getrow(0);(4) 获取单元格对象通过行对
7、象row来获得单元格对象。(5) 读取单元格中的数据通过单元格对象cell的getstringcellvalue()来读取单元格中的数据。精品.cell.getstringcellvalue();五、 如何在excel表格中显示数据excel文档由行元素和列元素构成,把数据按照整行整列显示,可以通过循环控制实现。关键代码如下。int i=0;while(table.next()hssfrow datarow=sheet.createrow(short)(i+2);/创建一行for(int j=0;j9;j+)hssfcell cell=datarow.createcell(short)j);/
8、创建单元格cell.stylecellstyle(datastyle);/设置单元格样式string data=table.getstring(j+2);/取出一条记录的记录项目cell.setcellvalue(data);/把数据写到单元格里i+;开发过程一、 创建实现类精品.当用户单击“查看”时,会将所有人员所有人员信息显示到excel中。这 过程分两步完成,第一步,从数据库中将数据查出来并保存在sqlrowset集合中;第二步,将集合中数据显示在excel电子表格中。(1) 从数据库取出数据取数据出userxslcontroller类完成。在handlerequest方法中,先创建连接
9、,然后向数据库发送sql语句查询出结果,这里的返回结果类型为sqlrowset,它可以类似于resultset那样遍历结果集。将集合放在map键值对里,传给userxslview类。代码如下。userxslcontroller.javapublic class userxslcontroller implements controllerprivate map msg=new hashmap();public modelandview handlerequest (httpservletrequest request,httpservletresponse response) throw ex
10、ceptionstring name=request.getparameter(“selectname”);string classname=new string(name.getbytes(“iso_8859_1”).”gb2312”);msg.put(“title”,classname+”学生详细信息”);/获得数据源drivermanagerdatasource dmds=new drivermanagerdatasource();/获得urldmds.setdriverclassname(“com.microsoft.jdbc.sqlserver.sqlserverdriver精品.”
11、);/获得驱动dmds.seturl(“jdbc:microsoft:sqlservler:/:1433;databasename=db_excel12”);dmds.setusername(“sa”);/数据库用户名dmds.setpassword(“sa“);/数据库密码jdbctemplate jtl=new jdbctemplate(dmds);/将数据源jdbctemplate模板/使用queryforrowset方法查询返回结果为sqlrowset类型sqlrowset list=jtl.queryforrowset(“select stu_id,name,sex
12、,age,sfzhm,csrq,zzmm.jtdh,jtdz,jkzk from tab_stuinfo where class id=”+classname+”);msg.put(“table”,list);/将结果集存到map中return new modelandview(“customxslview”,msg);(2) 在excel中显示数据首先继承sping提供的abstractexcelview类,并且在buildexceldocument()方法中编写显示代码。参数model是map类型,用于接收userxslcontroller类携带的数据。获昨数据后,先设置标题、表头字体和样
13、式,然后将model里的数据循环写入excel文档显示。程序代码如下。精品.userxslview.javapublic class userxslview extends abstractexcelviewprotected void buildexceldocument(map model,hssfworkbook workbook,httpservletrequest request,httpservletresponse response) throws exceptionsqlrowset table=(sqlrowset)model.get(“table”);/取得数据集合stri
14、ng title=model.get(“title”).tostring();/取得标题hssfsheet sheet=workbook.createsheet(title);/创建工作区hssfrow row_title=sheet.createrow(0);/创建行对象hssffont title_font=workbook.createfont();/创建标题的字体title_font.setfontheightinpoints(short)8);/设置标题字体属性title_font.setfontheight(short)hssffont.boldweight_normal);/同上
15、title_font.setcolor(short)(hssffont.color_red);/设置字体颜色hssfcellstyle title_style=workbook.createcellstyle();/创建样式title_style.setfont(title_font);/设置标题样式属性hssfcell cell_title=row_title.createcell(short)1);/创建单元格对象cell_title.setcellstyle(title_style);/设置单元格样式cell_title.setcellvalue(title);/将标题写到excel表格
16、里精品./以上为标题的字体和样式的属性设置string titles=“学生姓名”,”性别”,”年龄”,”身份证号”,”出生日期”,”政治面貌”,”家庭电话”,”家庭地址”,”健康状况”;hssfrow row=sheet.createrow(short)1);/创建行hssfcellstyle items_style=workbook.createcellstyle();/创建样式items_style.setalignment(short)hssfcellstyle.align_center);/设置表头样式hssffont celltbnamefont=workbook.createfo
17、nt();/创建字体celltbnamefont.setfontheightinpoints(short)10);/设置表头字体属性celltbnamefont.setcolor(short)(hssffont.color_red);/设置表头字体颜色items_style.setfont(celltbnamefont);items_style.setwraptext(true);for(int i=0;ititles.length;i+)hssfcell cell=row.createcell(short)i);if(i=3 | i=6 | i=2)sheet.setcolumnwidth(
18、short)i,(short)5335);/设置excel中列的宽度精品.elsesheet.setcolumnwidth(short)i,(short)3335); /设置excel中列的宽度cell.setcellstyle(items_style)/设置到此结束cell.setcellvalue(titlesi);/将数据表头数据写到单元格里hssfcellstyle datestyle=workbook.createcellstyle();hssfdataformat df=workbook.createdataformat();/设置日期在excel中的显示格式datastyle.s
19、etdataformat(df.getformat(“yyyy-mm-dd”);int i=0;while(table.next()hssfrow datarow=sheet.createrow(short)(i+2);/创建一行for(int j=0;j9;j+)hssfcell cell=datarow.createcell(short)j);/创建单元格精品.cell.stylecellstyle(datastyle);/设置单元格样式string data=table.getstring(j+2);/取出一条记录的记录项目cell.setcellvalue(data);/把数据写到单元
20、格里i+;(3) 创建读excel数据的类创建readxslcontroller该控制器的功能是读取excel文档中的数据并把它显示在控制台上。代码如下。readxslcontroller.javapublic class readxslcontroller implements controllerprivate string text;private short columns;private int rows;public modelandview handlerequest(httpservletrequest request,httpservletresponse response)
21、 throws exception精品.string pp=request.getparameter(“path”);string path=new string(pp.getbytes(“iso_8859_1”),”gb2312”);hssfworkbook workbook=new hssfworkbook(new fileinputstream(path);hssfsheet sheet=workbook.getsheetat(0);hssfrow row=sheet.getrow(sheet.getlastrownum();rows=sheet.getlastrownum()+1;co
22、lumns=row.getlastcellnum();text=new stringrowcolumns;for(int i=0;irows;i+)row=sheet.getrow(i);for(short j=0;jcolumns;j+)if(row=null)textij=null;continue;hssfcell cell;int type=0;cell=row.getcell(j);精品.if(cell!=null)type=cell.getcelltype();if(type=0)double num=cell.getnumericcellvalue();decimalformat
23、 df=new decimalformat(“0.00”);string size=df.format(num);textij=size;else if(type=1)string string=cell.getrichstringcellvalue().tostring();textij=stringelsetextij=null;精品.return new modelandview(“display”,”list”,text);读excel文件的示例类/* * (#)poit.java * description:从excel中读取数据 * * author wjj * version 1
24、.00 2008/2/29 */package com.ysusoft.util.db;import org.apache.poi.hssf.usermodel.*; import org.apache.poi.poifs.filesystem.poifsfilesystem;import java.io.fileoutputstream;import java.io.fileinputstream;import java.sql.*;import java.util.date; import java.text.simpledateformat;精品.public class poit po
25、ifsfilesystem fs=null;hssfworkbook wb=null;hssfsheet currentsheet=null; string filename=c:/2008-04-27_all.xls; public poit() try fs=new poifsfilesystem(new fileinputstream(c:/2008-04-27_all.xls); wb=new hssfworkbook(fs); catch(exception e) system.out.print(errors); public poit(string url) try fs=new
26、 poifsfilesystem(new fileinputstream(url); wb=new hssfworkbook(fs); 精品.catch(exception e)system.out.print(errors2); /设置要读取的文件名 public void setfilename(string filename) this.filename=filename; /根据类对象的文件名来生成excel文件流(无参函数) public void createworkbook() try fs=new poifsfilesystem(new fileinputstream(this
27、.filename); wb=new hssfworkbook(fs); catch(exception e)system.out.print(createworkbook():error!);精品. /根据sheet索引生成当前sheet public void setcurrentsheet(int sheet) currentsheet=wb.getsheetat(sheet); /根据指定的文件名来生成excel文件流 public void createworkbook(string url) try fs=new poifsfilesystem(new fileinputstrea
28、m(url); wb=new hssfworkbook(fs); catch(exception e)system.out.print(createworkbook():error!); /得到sheet的总行数 public int getrows() 精品. int rows=currentsheet.getlastrownum()+1; return rows; /得到sheet的总列数 public int getcolumns(int row) hssfrow cellrow=currentsheet.getrow(row); int columns=cellrow.getlastc
29、ellnum()+1; return columns; /获取固定行列的excel数据public string getvalue(int row1, int coll) /hssfsheet sheet = wb.getsheetat(0);hssfrow cellrow = currentsheet.getrow(row1);hssfcell cell = cellrow.getcell(short)coll);if (cell != null)switch (cell.getcelltype() / 0为整形,如果是数值型数据case 0:/ 当单元格类型为日期型时if (hssfdat
30、eutil.iscelldateformatted(cell) 精品.simpledateformat ym = new simpledateformat(yyyy-mm-dd);return ym.format(cell.getdatecellvalue();/ cell.getdatecellvalue().getyear()+-/ +cell.getdatecellvalue().getmonth(); else / system.out.println(输出);return double.tostring(cell.getnumericcellvalue();/ return/ str
31、ing.valueof(long)cell.getnumericcellvalue();/ 如果是字符型数据case 1:/ system.out.println(字符串);return cell.getstringcellvalue();return ;/ 获得excel文件中的sheet的个数public int getsheetnumber()精品.int number=wb.getnumberofsheets();return number;public string getsheetname(int sheet)string sheetname=wb.getsheetname(she
32、et);return sheetname; / 测试 public static void main(string args) poit po=new poit(); system.out.println(excel文件中的sheet数:+po.getsheetnumber(); for(int i=0;ipo.getsheetnumber();i+) system.out.println(第+i+个sheet的名字为:+po.getsheetname(i); po.setcurrentsheet(i); int row=po.getrows(); system.out.println(po.
33、getsheetname(i)+的行数为:+row); for(int j=0;jrow;j+) int column=po.getcolumns(j);精品. system.out.println(po.getsheetname(i)+的第+j+行数的总列数为:+po.getcolumns(j); for(int k=0;kcolumn;k+) system.out.println(po.getsheetname(i)+的第+j+行:第+k+列的内容为+po.getvalue(j,k); system.out.println(-); 写excel文件的示例类/* * (#)poitoexce
34、l.java * * * author * version 1.00 2008/4/21精品. */package com.ysusoft.util.db;import java.awt.color;import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util.region;import java.io.fileoutputstream;public class poitoexcel hssfworkbook wb=new hssfworkbook(); hssfsheet currentsheet=null;
35、/hssfcell cell=null; /hssfsheet sheet=wb.createsheet(sheet1); string filename=c:test.xls; string sheetname=; public poitoexcel() / currentsheet=this.sheet; /* try hssfworkbook wb=new hssfworkbook(); fileoutputstream fileout = new fileoutputstream(filename); wb.write(fileout);精品. fileout.close(); cat
36、ch(exception e) e.printstacktrace(); */ public void addsheet(string sheetname) this.sheetname=sheetname; this.currentsheet=wb.createsheet(sheetname); public void addsheet() this.currentsheet=wb.createsheet(this.sheetname); public void setfilename(string filename) this.filename=filename; public void
37、setsheetname(string sheetname)精品. this.sheetname=sheetname; /设置excel表单指定单元格的值 public void setvalue(string str,int rowno,int colno) hssfrow row=currentsheet.createrow(short)rowno); row.createcell(short)colno).setcellvalue(str); public void setvalue(int str,int rowno,int colno) hssfrow row=currentshee
38、t.createrow(short)rowno); row.createcell(short)colno).setcellvalue(str); public void setvalue(float str,int rowno,int colno) hssfrow row=currentsheet.createrow(short)rowno); row.createcell(short)colno).setcellvalue(str); 精品. public void setvalue(double str,int rowno,int colno) hssfrow row=currentshe
39、et.createrow(short)rowno); row.createcell(short)colno).setcellvalue(str); public hssfcell setvaluecell(string str,int rowno,int colno) hssfrow row=currentsheet.createrow(short)rowno); hssfcell cell=row.createcell(short)colno); cell.setcellvalue(str); return cell; public hssfcell setvaluecell(int str
40、,int rowno,int colno) hssfrow row=currentsheet.createrow(short)rowno); hssfcell cell=row.createcell(short)colno); cell.setcellvalue(str); return cell; public hssfcell setvaluecell(float str,int rowno,int colno) 精品. hssfrow row=currentsheet.createrow(short)rowno); hssfcell cell=row.createcell(short)c
41、olno); cell.setcellvalue(str); return cell; public hssfcell setvaluecell(double str,int rowno,int colno) hssfrow row=currentsheet.createrow(short)rowno); hssfcell cell=row.createcell(short)colno); cell.setcellvalue(str); return cell; public void submitval() try fileoutputstream fileout = new fileout
42、putstream(filename); wb.write(fileout); fileout.close(); catch(exception e) e.printstacktrace(); 精品. /参数的意思为合并的内容、起始行列row1,col1和终止行列row2,col2 public void mergedcells(string str,int row1,int col1,int row2,int col2) hssfrow row = currentsheet.createrow(short)row1); /创建一个单元格 hssfcell cell = row.createc
43、ell(short)col1); /防止乱码 cell.setencoding(hssfcell.encoding_utf_16); /设置单元格内容 cell.setcellvalue(str); /设置单元格字体 hssffont font = wb.createfont(); font.setfontheightinpoints(short)10);/设置字体大小 hssfcellstyle style = wb.createcellstyle(); style.setfont(font); /居中显示 style.setalignment(hssfcellstyle.align_cen
44、ter ); cell.setcellstyle(style); /region各参数的意思为合并的起始行列row1,col1和终止行列row2,col2 currentsheet.addmergedregion(new region(row1, (short)col1, row2, (short)col2);精品. /*将单元格写入文件 try fileoutputstream fileout = new fileoutputstream(c:test.xls); wb.write(fileout); fileout.close(); catch(exception e) e.printst
45、acktrace(); */ /设置单元格中的字体的颜色,对齐方式 /设置单元格中的字体的格式,和高度 public void setfont(hssfcell cell,int heightinpoints,int height,int color,int align) hssffont font=wb.createfont(); font.setfontheightinpoints(short)heightinpoints); font.setfontheight(short)height); font.setcolor(short)(color); hssfcellstyle style
46、=wb.createcellstyle(); style.setfont(font);精品. style.setalignment(short)align); cell.setcellstyle(style); /设置单元格中的字体的颜色,对齐方式 /设置单元格中的字体的格式 public void setfont(hssfcell cell,int heightinpoints,int color,int align) hssffont font=wb.createfont(); font.setfontheightinpoints(short)heightinpoints); font.setcolor(short)(color); hssfcellstyle style=wb.createcellstyle(); style.setfont(font); style.setalignment(short)align); cell.setcellstyle(style); /设置单元格中的字体的颜色,对齐方式 public void setfont(hssfcell c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高考生物最后冲刺押题试卷及答案(共九套)
- 2026年假膜性肠炎患者护理常规课件
- 智慧制造:信息系统集成-赋能制造业提升竞争力
- 塑料工艺:创新与突破-从需求出发优化性能提升竞争力
- 浅析高中班主任德育工作的有效开展策略
- 汽车维修与保养标准操作流程预案
- 行业招聘面试题库及评分标准
- 环境友爱行动计划承诺书(6篇)
- 教育科技研发承诺函8篇
- 互联网时代中小企业市场营销策略研究报告
- 2026临沂郯城县司法雇员招聘(40名)农业笔试备考题库及答案解析
- 2026半包装修合同
- 河南工业职业技术学院2026年单独招生《职业适应性测试》模拟试题
- 2026校招:山东鲁信投资控股集团笔试题及答案
- 小学学校内部控制制度
- 5.1《四大地理区域的划分》参考教学设计
- 中国跨境数据流动安全管理与合规审计要点分析报告
- 风机液压站培训课件
- 2026年湖南有色新田岭钨业有限公司招聘备考题库及一套完整答案详解
- 家庭减盐科普
- 反贿赂管理体系培训课件
评论
0/150
提交评论