POI操作EXCELWord文档格式.docx

上传人:b****6 文档编号:21906657 上传时间:2023-02-01 格式:DOCX 页数:12 大小:19.26KB
下载 相关 举报
POI操作EXCELWord文档格式.docx_第1页
第1页 / 共12页
POI操作EXCELWord文档格式.docx_第2页
第2页 / 共12页
POI操作EXCELWord文档格式.docx_第3页
第3页 / 共12页
POI操作EXCELWord文档格式.docx_第4页
第4页 / 共12页
POI操作EXCELWord文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

POI操作EXCELWord文档格式.docx

《POI操作EXCELWord文档格式.docx》由会员分享,可在线阅读,更多相关《POI操作EXCELWord文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

POI操作EXCELWord文档格式.docx

importorg.apache.poi.hssf.usermodel.HSSFWorkbook;

importorg.apache.poi.hssf.util.HSSFColor;

/**

*利用开源组件POI3.0.2动态导出EXCEL文档

*

*@versionv1.0

*@param<

T>

*应用泛型,代表任意一个符合javabean风格的类

*注意这里为了简单起见,boolean型的属性xxx的get器方式为getXxx(),而不是isXxx()

*byte[]表jpg格式的图片数据

*/

publicclassExportExcel<

{

publicvoidexportExcel(Collection<

dataset,OutputStreamout){

exportExcel("

测试POI导出EXCEL文档"

null,dataset,out,"

yyyy-MM-dd"

);

}

publicvoidexportExcel(Map<

String,String>

headers,Collection<

dataset,

OutputStreamout){

headers,dataset,out,"

OutputStreamout,Stringpattern){

headers,dataset,out,pattern);

/**

*这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL的形式输出到指定IO设备上

*@paramtitle

*表格标题名

*@paramheaders

*表格属性列名数组

*@paramdataset

*需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。

此方法支持的

*javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据)

*@paramout

*与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中

*@parampattern

*如果有时间数据,设定输出格式。

默认为"

yyy-MM-dd"

@SuppressWarnings("

unchecked"

publicvoidexportExcel(Stringtitle,Mapheaders,Collection<

//声明一个工作薄

HSSFWorkbookworkbook=newHSSFWorkbook();

//生成一个表格

HSSFSheetsheet=workbook.createSheet(title);

//设置表格默认列宽度为15个字节

sheet.setDefaultColumnWidth(15);

//生成一个样式

HSSFCellStylestyle=workbook.createCellStyle();

//设置这些样式

style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);

style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

style.setBorderRight(HSSFCellStyle.BORDER_THIN);

style.setBorderTop(HSSFCellStyle.BORDER_THIN);

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

//生成一个字体

HSSFFontfont=workbook.createFont();

font.setColor(HSSFColor.VIOLET.index);

font.setFontHeightInPoints((short)12);

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

//把字体应用到当前的样式

style.setFont(font);

//生成并设置另一个样式

HSSFCellStylestyle2=workbook.createCellStyle();

style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);

style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);

style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);

style2.setBorderRight(HSSFCellStyle.BORDER_THIN);

style2.setBorderTop(HSSFCellStyle.BORDER_THIN);

style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);

style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

//生成另一个字体

HSSFFontfont2=workbook.createFont();

font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);

style2.setFont(font2);

//声明一个画图的顶级管理器

HSSFPatriarchpatriarch=sheet.createDrawingPatriarch();

//定义注释的大小和位置,详见文档

HSSFCommentcomment=patriarch.createComment(newHSSFClientAnchor(0,

0,0,0,(short)4,2,(short)6,5));

//设置注释内容

comment.setString(newHSSFRichTextString("

可以在POI中添加注释!

"

));

//设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.

comment.setAuthor("

system"

//产生表格标题行

HSSFRowrow=sheet.createRow(0);

Iteratoriter=headers.entrySet().iterator();

inti=0;

while(iter.hasNext()){

Map.Entryentry=(Map.Entry)iter.next();

//Stringkey=(String)entry.getKey();

Stringval=(String)entry.getValue();

HSSFCellcell=row.createCell(i);

cell.setCellStyle(style);

HSSFRichTextStringtext=newHSSFRichTextString(val);

cell.setCellValue(text);

i++;

}

//遍历集合数据,产生数据行

Iterator<

it=dataset.iterator();

intindex=0;

while(it.hasNext()){

index++;

row=sheet.createRow(index);

Tt=(T)it.next();

//利用反射,根据headersd的kay,动态调用getXxx()方法得到属性值

intj=-1;

Iteratoriterk=headers.entrySet().iterator();

while(iterk.hasNext()){

Map.Entryentry=(Map.Entry)iterk.next();

Stringkey=(String)entry.getKey();

StringfieldName=key;

j++;

HSSFCellcell=row.createCell(j);

cell.setCellStyle(style2);

StringgetMethodName="

get"

+fieldName.substring(0,1).toUpperCase()

+fieldName.substring

(1);

try{

ClasstCls=t.getClass();

MethodgetMethod=tCls.getMethod(getMethodName,

newClass[]{});

Objectvalue=getMethod.invoke(t,newObject[]{});

//判断值的类型后进行强制类型转换

StringtextValue=null;

if(valueinstanceofDate){

Datedate=(Date)value;

SimpleDateFormatsdf=newSimpleDateFormat(pattern);

textValue=sdf.format(date);

}elseif(valueinstanceofbyte[]){

//有图片时,设置行高为60px;

row.setHeightInPoints(60);

//设置图片所在列宽度为80px,注意这里单位的一个换算

sheet.setColumnWidth(i,(short)(35.7*80));

//sheet.autoSizeColumn(i);

byte[]bsValue=(byte[])value;

HSSFClientAnchoranchor=newHSSFClientAnchor(0,0,

1023,255,(short)6,index,(short)6,index);

anchor.setAnchorType

(2);

patriarch.createPicture(anchor,workbook.addPicture(

bsValue,HSSFWorkbook.PICTURE_TYPE_JPEG));

}else{

//其它数据类型都当作字符串简单处理

textValue=value.toString();

}

//如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成

if(textValue!

=null){

Patternp=Ppile("

^//d+(//.//d+)?

$"

Matchermatcher=p.matcher(textValue);

if(matcher.matches()){

//是数字当作double处理

cell.setCellValue(Double.parseDouble(textValue));

}else{

HSSFRichTextStringrichString=newHSSFRichTextString(

textValue);

HSSFFontfont3=workbook.createFont();

font3.setColor(HSSFColor.BLUE.index);

richString.applyFont(font3);

cell.setCellValue(richString);

}

}catch(SecurityExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(NoSuchMethodExceptione){

}catch(IllegalArgumentExceptione){

}catch(IllegalAccessExceptione){

}catch(InvocationTargetExceptione){

}finally{

//清理资源

}

}

try{

workbook.write(out);

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

publicstaticvoidmain(String[]args){

//测试学生

ExportExcel<

Student>

ex=newExportExcel<

();

Map<

headers=newLinkedHashMap<

headers.put("

id"

"

学号"

name"

姓名"

age"

年龄"

sex"

性别"

birthday"

出生日期"

List<

dataset=newArrayList<

dataset

.add(newStudent("

10000001"

张三"

20"

true"

2013-9-8"

20000002"

李四"

24"

false"

"

2014-9-9"

30000003"

王五"

22"

2014-9-19"

OutputStreamout=newFileOutputStream("

E:

//a.xls"

ex.exportExcel(headers,dataset,out);

out.close();

JOptionPane.showMessageDialog(null,"

导出成功!

System.out.println("

excel导出成功!

}catch(FileNotFoundExceptione){

}

PoiExcelExampleservlet类:

importjava.io.*;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

*POI导出Excel事例

publicclassPoiExcelExampleextendsjavax.servlet.http.HttpServlet{

staticfinallongserialVersionUID=1L;

protectedvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)throwsServletException,IOException{

response.setContentType("

octets/stream"

response.addHeader("

Content-Disposition"

attachment;

filename=test.xls"

//测试学生

ExportExcel<

dataset.add(newStudent("

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1