excel导入导出通用方法.docx
- 文档编号:27608374
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:22
- 大小:22.98KB
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.List
57.List
58.//拿到所有列名,以及导出的字段的get方法
59.List
60.Map
61.//得到所有字段
62.Fieldfileds[]=pojoClass.getDeclaredFields();
63.//遍历整个filed
64.for(inti=0;i 65.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();i 105.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;i 115.//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();k 126.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.//开
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- excel 导入 导出 通用 方法