




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、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
2、.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. *authorlsf20. */21. publicclassExportExcel22. /*23. *param
3、fileNameEXCEL文件名稱24. *paramlistTitleEXCEL文件第一行列標題集合25. *paramlistContentEXCEL文件正文數據集合26. *return27. */28. publicfinalstaticStringexportExcel(StringfileName,StringTitle,ListlistContent)29. Stringresult=系統提示:Excel文件導出成功!;30. /以下開始輸出到EXCEL31. try32. /定義輸出流,以便打開保存對話框_begin33. HttpServletResponseresponse
4、=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. /定
5、義輸出流,以便打開保存對話框_end40. 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. /*設置單元格字體
6、*/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,BorderLine
7、Style.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,BorderLineS
8、tyle.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
9、第一行列標題*/77. for(inti=0;iTitle.length;i+)78. sheet.addCell(newLabel(i,0,Titlei,wcf_center);79. 80. /*以下是EXCEL正文數據*/81. Fieldfields=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(
10、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.
11、 e.printStackTrace();106. 107. returnresult;108. 109. 3.通用導出:javaview plaincopy1. 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.Collectio
12、n;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.
13、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. publicclassExcelExport230. 31. 32. publicstaticvoidexportE
14、xcel(Stringtitle,ClasspojoClass,CollectiondataSet,33. OutputStreamout)34. /使用userModel模式實現的,當excel文檔出現10萬級別的大數據文件可能導致OOM內存溢出35. exportExcelInUserModel(title,pojoClass,dataSet,out);36. /使用eventModel實現,可以一邊讀一邊處理,效率較高,但是實現復雜,暫時未實現37. 38. privatestaticvoidexportExcelInUserModel(Stringtitle,ClasspojoClas
15、s,CollectiondataSet,39. OutputStreamout)40. try41. /首先檢查數據看是否是正確的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=wor
16、kbook.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. /遍歷整個filed64. for(inti=0;if
17、ileds.length;i+)65. Fieldfield=filedsi;66. Excelexcel=field.getAnnotation(Excel.class);67. /如果設置了annottion68. if(excel!=null)69. /添加到標題70. exportFieldTitle.add(excel.exportName();71. /添加標題的列寬72. exportFieldWidth.add(excel.exportFieldWidth();73. /添加到需要導出的字段的方法74. Stringfieldname=field.getName();75. /
18、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.toS
19、tring(),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. getConvert
20、MethodName.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. Row
21、row=sheet.createRow(index);104. for(inti=0,exportFieldTitleSize=exportFieldTitle.size();iexportFieldTitleSize;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.
22、/設置每行的列寬114. for(inti=0;iexportFieldWidth.size();i+)115. /256=65280/255116. 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.
23、for(intk=0,methodObjSize=methodObj.size();kmethodObjSize;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.
24、 else134. 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(Stringargs)throwsException152. 153. 154. /構造一個模擬的List來測試
25、,實際使用時,這個集合用從數據庫中查出來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;i50000;i+)165. St
26、udentpojo=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
27、.xls);176. /開始時間177. Longl=System.currentTimeMillis();178. /注意179. ExcelExport2ex=newExcelExport2();180. /181. ex.exportExcel(測試,Student.class,list,out);182. out.close();183. /結束時間184. Longs=System.currentTimeMillis();185. System.out.println(excel導出成功);186. System.out.println(總共耗時:+(s-l);187. 188. 1
28、89. 190. 191. 192. 4.通用導入:javaview plaincopy1. packagemon.excel.parser;2. 3. 4. importjava.io.File;5. importjava.io.FileInputStream;6. importjava.lang.reflect.Field;7. importjava.lang.reflect.Method;8. importjava.lang.reflect.Type;9. importjava.text.SimpleDateFormat;10. importjava.util.ArrayList;11.
29、 importjava.util.Collection;12. importjava.util.HashMap;13. importjava.util.Iterator;14. importjava.util.List;15. importjava.util.Map;16. 17. 18. importorg.apache.poi.hssf.usermodel.HSSFSheet;19. importorg.apache.poi.hssf.usermodel.HSSFWorkbook;20. importorg.apache.poi.ss.usermodel.Cell;21. importor
30、g.apache.poi.ss.usermodel.Row;22. 23. 24. importcom.huateng.test.pojo.Student;25. 26. 27. publicclassExcelImport228. 29. publicCollectionimportExcel(Filefile,ClasspojoClass,String.pattern)30. 31. Collectiondist=newArrayList();32. try33. /得到目標目標類的所有的字段列表34. Fieldfiled=pojoClass.getDeclaredFields();35
31、. /將所有標有Annotation的字段,也就是允許導入數據的字段,放入到一個map中36. MapfieldSetMap=newHashMap();37. 38. MapfieldSetConvertMap=newHashMap();39. 40. 41. /循環讀取所有字段42. for(inti=0;ifiled.length;i+)43. Fieldf=filedi;44. 45. /得到單個字段上的Annotation46. Excelexcel=f.getAnnotation(Excel.class);47. 48. /如果標識了Annotationd的話49. if(excel
32、!=null)50. /構造設置了Annotation的字段的Setter方法51. Stringfieldname=f.getName();52. StringsetMethodName=set53. +fieldname.substring(0,1).toUpperCase()54. +fieldname.substring(1);55. /構造調用的method,56. MethodsetMethod=pojoClass.getMethod(setMethodName,57. newClassf.getType();58. /將這個method以Annotaion的名字為key來存入。5
33、9. 60. /對于重名將導致覆蓋失敗,對于此處的限制需要61. fieldSetMap.put(excel.exportName(),setMethod);62. 63. if(excel.importConvertSign()=1)64. 65. StringBuffersetConvertMethodName=newStringBuffer(set);66. setConvertMethodName.append(fieldname.substring(0,1)67. .toUpperCase();68. setConvertMethodName.append(fieldname.sub
34、string(1);69. setConvertMethodName.append(Convert);70. MethodgetConvertMethod=pojoClass.getMethod(setConvertMethodName.toString(),71. newClassString.class);72. fieldSetConvertMap.put(excel.exportName(),getConvertMethod);73. 74. 75. 76. 77. 78. 79. 80. 81. 82. /將傳入的File構造為FileInputStream;83. FileInpu
35、tStreamin=newFileInputStream(file);84. /得到工作表85. HSSFWorkbookbook=newHSSFWorkbook(in);86. /得到第一頁87. HSSFSheetsheet=book.getSheetAt(0);88. /得到第一面的所有行89. Iteratorrow=sheet.rowIterator();90. 91. 92. /得到第一行,也就是標題行93. Rowtitle=row.next();94. /得到第一行的所有列95. IteratorcellTitle=title.cellIterator();96. /將標題的文
36、字內容放入到一個map中。97. Maptitlemap=newHashMap();98. /從標題第一列開始99. inti=0;100. /循環標題所有的列101. while(cellTitle.hasNext()102. Cellcell=cellTitle.next();103. Stringvalue=cell.getStringCellValue();104. titlemap.put(i,value);105. i=i+1;106. 107. 108. 109. /用來格式化日期的DateFormat110. SimpleDateFormatsf;111. if(pattern
37、.length1)112. 113. sf=newSimpleDateFormat(yyyy-MM-dd);114. 115. else116. sf=newSimpleDateFormat(pattern0);117. 118. 119. while(row.hasNext()120. /標題下的第一行121. Rowrown=row.next();122. 123. /行的所有列124. Iteratorcellbody=rown.cellIterator();125. 126. /得到傳入類的實例127. ObjecttObject=pojoClass.newInstance();128
38、. 129. intk=0;130. /遍歷一行的列131. while(cellbody.hasNext()132. Cellcell=cellbody.next();133. /這里得到此列的對應的標題134. StringtitleString=(String)titlemap.get(k);135. /如果這一列的標題和類中的某一列的Annotation相同,那么則調用此類的的set方法,進行設值136. if(fieldSetMap.containsKey(titleString)137. 138. MethodsetMethod=(Method)fieldSetMap.get(ti
39、tleString);139. /得到setter方法的參數140. Typets=setMethod.getGenericParameterTypes();141. /只要一個參數142. Stringxclass=ts0.toString();143. /判斷參數類型144. System.out.println(類型:+xclass);145. 146. if(fieldSetConvertMap.containsKey(titleString)147. 148. 149. fieldSetConvertMap.get(titleString).invoke(tObject,150. cell.getStringCellValue();151. 152. 153. else154. if(xclass.equals(classjava.lang.String)155. setMethod
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 徽縣特崗面試真題及答案
- 黃石教資面試真題及答案
- 榆次二模試題及答案英語
- 家具行業的市場營銷對產品設計的指導作用研究試題及答案
- 新能源汽車技術的質量保障體系試題及答案
- 砂輪機安全試題及答案
- 粗苯工藝培訓試題及答案
- 家具行業的人才需求與培養問題試題及答案
- 民辦教育機構2025年合規運營風險防范與品牌影響力提升分析
- 醫藥企業研發外包(CRO)模式在2025年的國際合作與本土化發展報告
- T-COFA 0021-2022 漁用油電混合多旋翼無人機安全檢查和維 護保養要求
- 2025貴州畢節市七星關區招聘城市社區工作者186人筆試備考題庫及答案解析
- 2025屆河北省“五個一”名校聯盟高三下學期4月聯考化學試題(含答案)
- 山東省泰安市2025屆高三二輪模擬檢測考試政治(泰安二模)(含答案)
- 2025-2030中國環境監測發展分析及發展趨勢與投資前景研究報告
- 2025年教師資格證面試結構化模擬題:教師心理健康維護試題集
- 大疆精靈4 RTK無人機操作與測繪培訓指南
- 2025屆江蘇省南京一中高三第二次模擬考試物理試卷含解析
- 初中語文第16課《有為有不為》課件-2024-2025學年統編版語文七年級下冊
- 2025年內蒙古化工職業學院單招職業技能考試題庫必考題
- 2024-2025下學期高二化學魯科版期中必刷題之化學鍵與物質的性質
評論
0/150
提交評論