excel导入导出通用方法.docx
《excel导入导出通用方法.docx》由会员分享,可在线阅读,更多相关《excel导入导出通用方法.docx(22页珍藏版)》请在冰豆网上搜索。
excel导入导出通用方法
1.packagemon.utils;
2.importjava.io.OutputStream;
3.importjava.util.List;
4.importjavax.servlet.http.HttpServletResponse;
5.importorg.apache.struts2.ServletActionContext;
6.importjava.lang.reflect.Field;
7.
8.importjxl.Workbook;
9.importjxl.format.Alignment;
10.importjxl.format.Border;
11.importjxl.format.BorderLineStyle;
12.importjxl.format.VerticalAlignment;
13.importjxl.write.Label;
14.importjxl.write.WritableCellFormat;
15.importjxl.write.WritableFont;
16.importjxl.write.WritableSheet;
17.importjxl.write.WritableWorkbook;
18./***
19.*@authorlsf
20.*/
21.publicclassExportExcel{
22./***************************************************************************
23.*@paramfileNameEXCEL文件名称
24.*@paramlistTitleEXCEL文件第一行列标题集合
25.*@paramlistContentEXCEL文件正文数据集合
26.*@return
27.*/
28.publicfinalstaticStringexportExcel(StringfileName,String[]Title,List
29.Stringresult=系统提示:
Excel文件导出成功!
;
30.//以下开始输出到EXCEL
31.try{
32.//定义输出流,以便打开保存对话框______________________begin
33.HttpServletResponseresponse=ServletActionContext.getResponse();
34.OutputStreamos=response.getOutputStream();//取得输出流
35.response.reset();//清空输出流
36.response.setHeader(Content-disposition,attachment;filename=+newString(fileName.getBytes(GB2312),ISO8859-1));
37.//设定输出文件头
38.response.setContentType(application/msexcel);//定义输出类型
39.//定义输出流,以便打开保存对话框_______________________end
40.
41./************创建工作簿*************/
42.WritableWorkbookworkbook=Workbook.createWorkbook(os);
43.
44./************创建工作表*************/
45.
46.WritableSheetsheet=workbook.createSheet(Sheet1,0);
47.
48./************设置纵横打印(默认为纵打)、打印纸******************/
49.jxl.SheetSettingssheetset=sheet.getSettings();
50.sheetset.setProtected(false);
51.
52.
53./**************设置单元格字体***************/
54.WritableFontNormalFont=newWritableFont(WritableFont.ARIAL,10);
55.WritableFontBoldFont=newWritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);
56.
57./**************以下设置三种单元格样式,灵活备用*************/
58.//用于标题居中
59.WritableCellFormatwcf_center=newWritableCellFormat(BoldFont);
60.wcf_center.setBorder(Border.ALL,BorderLineStyle.THIN);//线条
61.wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE);//文字垂直对齐
62.wcf_center.setAlignment(Alignment.CENTRE);//文字水平对齐
63.wcf_center.setWrap(false);//文字是否换行
64.
65.//用于正文居左
66.WritableCellFormatwcf_left=newWritableCellFormat(NormalFont);
67.wcf_left.setBorder(Border.NONE,BorderLineStyle.THIN);//线条
68.wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE);//文字垂直对齐
69.wcf_left.setAlignment(Alignment.LEFT);//文字水平对齐
70.wcf_left.setWrap(false);//文字是否换行
71.
72.
73./*****************以下是EXCEL开头大标题,暂时省略**********************/
74.//sheet.mergeCells(0,0,colWidth,0);
75.//sheet.addCell(newLabel(0,0,XX报表,wcf_center));
76./*****************以下是EXCEL第一行列标题**********************/
77.for(inti=0;i
78.sheet.addCell(newLabel(i,0,Title[i],wcf_center));
79.}
80./*****************以下是EXCEL正文数据**********************/
81.Field[]fields=null;
82.inti=1;
83.for(Objectobj:
listContent){
84.fields=obj.getClass().getDeclaredFields();
85.intj=0;
86.for(Fieldv:
fields){
87.v.setAccessible(true);
88.Objectva=v.get(obj);
89.if(va==null){
90.va=;
91.}
92.sheet.addCell(newLabel(j,i,va.toString(),wcf_left));
93.j++;
94.}
95.i++;
96.}
97./************将以上缓存中的内容写到EXCEL文件中*********/
98.workbook.write();
99./***********关闭文件**************/
100.workbook.close();
101.
102.}catch(Exceptione){
103.result=系统提示:
Excel文件导出失败,原因:
+e.toString();
104.System.out.println(result);
105.e.printStackTrace();
106.}
107.returnresult;
108.}
109.}
3.通用导出:
[java]viewplaincopy
1.packagemon.excel.parser;
2.
3.
4.importjava.io.FileOutputStream;
5.importjava.io.OutputStream;
6.importjava.lang.reflect.Field;
7.importjava.lang.reflect.Method;
8.importjava.util.ArrayList;
9.importjava.util.Collection;
10.importjava.util.Date;
11.importjava.util.HashMap;
12.importjava.util.Iterator;
13.importjava.util.List;
14.importjava.util.Map;
15.
16.
17.importorg.apache.poi.hssf.usermodel.HSSFRichTextString;
18.importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
19.importorg.apache.poi.ss.usermodel.Cell;
20.importorg.apache.poi.ss.usermodel.RichTextString;
21.importorg.apache.poi.ss.usermodel.Row;
22.importorg.apache.poi.ss.usermodel.Sheet;
23.importorg.apache.poi.ss.usermodel.Workbook;
24.
25.
26.importcom.huateng.test.pojo.Student;
27.
28.
29.publicclassExcelExport2{
30.
31.
32.publicstaticvoidexportExcel(Stringtitle,ClasspojoClass,CollectiondataSet,
33.OutputStreamout){
34.//使用userModel模式实现的,当excel文档出现10万级别的大数据文件可能导致OOM内存溢出
35.exportExcelInUserModel(title,pojoClass,dataSet,out);
36.//使用eventModel实现,可以一边读一边处理,效率较高,但是实现复杂,暂时未实现
37.}
38.privatestaticvoidexportExcelInUserModel(Stringtitle,ClasspojoClass,CollectiondataSet,
39.OutputStreamout){
40.try{
41.//首先检查数据看是否是正确的
42.if(dataSet==null||dataSet.size()==0){
43.thrownewException(导出数据为空!
);
44.}
45.if(title==null||out==null||pojoClass==null)
46.{
47.thrownewException(传入参数不能为空!
);
48.}
49.//声明一个工作薄
50.Workbookworkbook=newHSSFWorkbook();
51.//生成一个表格
52.Sheetsheet=workbook.createSheet(title);
53.
54.
55.//标题
56.ListexportFieldTitle=newArrayList();
57.ListexportFieldWidth=newArrayList();
58.//拿到所有列名,以及导出的字段的get方法
59.ListmethodObj=newArrayList();
60.MapconvertMethod=newHashMap();
61.//得到所有字段
62.Fieldfileds[]=pojoClass.getDeclaredFields();
63.//遍历整个filed
64.for(inti=0;i65.Fieldfield=fileds[i];
66.Excelexcel=field.getAnnotation(Excel.class);
67.//如果设置了annottion
68.if(excel!
=null){
69.//添加到标题
70.exportFieldTitle.add(excel.exportName());
71.//添加标题的列宽
72.exportFieldWidth.add(excel.exportFieldWidth());
73.//添加到需要导出的字段的方法
74.Stringfieldname=field.getName();
75.//System.out.println(i+列宽+excel.exportName()++excel.exportFieldWidth());
76.StringBuffergetMethodName=newStringBuffer(get);
77.getMethodName.append(fieldname.substring(0,1)
78..toUpperCase());
79.getMethodName.append(fieldname.substring
(1));
80.
81.
82.MethodgetMethod=pojoClass.getMethod(getMethodName.toString(),
83.newClass[]{});
84.
85.
86.methodObj.add(getMethod);
87.if(excel.exportConvertSign()==1)
88.{
89.StringBuffergetConvertMethodName=newStringBuffer(get);
90.getConvertMethodName.append(fieldname.substring(0,1)
91..toUpperCase());
92.getConvertMethodName.append(fieldname.substring
(1));
93.getConvertMethodName.append(Convert);
94.//System.out.println(convert:
+getConvertMethodName.toString());
95.MethodgetConvertMethod=pojoClass.getMethod(getConvertMethodName.toString(),
96.newClass[]{});
97.convertMethod.put(getMethodName.toString(),getConvertMethod);
98.}
99.}
100.}
101.intindex=0;
102.//产生表格标题行
103.Rowrow=sheet.createRow(index);
104.for(inti=0,exportFieldTitleSize=exportFieldTitle.size();i105.Cellcell=row.createCell(i);
106.//cell.setCellStyle(style);
107.RichTextStringtext=newHSSFRichTextString(
108.exportFieldTitle.get(i));
109.cell.setCellValue(text);
110.}
111.
112.
113.//设置每行的列宽
114.for(inti=0;i115.//256=65280/255
116.sheet.setColumnWidth(i,256*exportFieldWidth.get(i));
117.}
118.Iteratorits=dataSet.iterator();
119.//循环插入剩下的集合
120.while(its.hasNext()){
121.//从第二行开始写,第一行是标题
122.index++;
123.row=sheet.createRow(index);
124.Objectt=its.next();
125.for(intk=0,methodObjSize=methodObj.size();k126.Cellcell=row.createCell(k);
127.MethodgetMethod=methodObj.get(k);
128.Objectvalue=null;
129.if(convertMethod.containsKey(getMethod.getName()))
130.{
131.Methodcm=convertMethod.get(getMethod.getName());
132.value=cm.invoke(t,newObject[]{});
133.}else
134.{
135.value=getMethod.invoke(t,newObject[]{});
136.}
137.cell.setCellValue(value.toString());
138.}
139.}
140.
141.
142.workbook.write(out);
143.}catch(Exceptione){
144.e.printStackTrace();
145.}
146.
147.
148.}
149.
150.
151.publicstaticvoidmain(String[]args)throwsException{
152.
153.
154.//构造一个模拟的List来测试,实际使用时,这个集合用从数据库中查出来
155.Studentpojo2=newStudent();
156.pojo2.setName(第一行数据);
157.pojo2.setAge(28);
158.pojo2.setSex
(2);
159.pojo2.setDesc(abcdefghijklmnop);
160.pojo2.setBirthDate(newDate());
161.pojo2.setIsVip(true);
162.Listlist=newArrayList();
163.list.add(pojo2);
164.for(inti=0;i<50000;i++){
165.Studentpojo=newStudent();
166.pojo.setName(一二三四五六七八九);
167.pojo.setAge(22);
168.pojo.setSex
(1);
169.pojo.setDesc(abcdefghijklmnop);
170.pojo.setBirthDate(newDate());
171.pojo.setIsVip(false);
172.list.add(pojo);
173.}
174.//构造输出对象,可以从response输出,直接向用户提供下载
175.OutputStreamout=newFileOutputStream(D:
//testOne.xls);
176.//开