excel导入导出通用方法.docx

上传人:b****8 文档编号:27608374 上传时间:2023-07-03 格式:DOCX 页数:22 大小:22.98KB
下载 相关 举报
excel导入导出通用方法.docx_第1页
第1页 / 共22页
excel导入导出通用方法.docx_第2页
第2页 / 共22页
excel导入导出通用方法.docx_第3页
第3页 / 共22页
excel导入导出通用方法.docx_第4页
第4页 / 共22页
excel导入导出通用方法.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

excel导入导出通用方法.docx

《excel导入导出通用方法.docx》由会员分享,可在线阅读,更多相关《excel导入导出通用方法.docx(22页珍藏版)》请在冰豆网上搜索。

excel导入导出通用方法.docx

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,ListlistContent){

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;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.//开

展开阅读全文
相关搜索

当前位置:首页 > 求职职场 > 笔试

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

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