在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java通用的Excel文件生成工具类,支持生成文件和浏览器直接下载

2016-12-20 13:15| 发布者: zhangjf| 查看: 425| 评论: 0

摘要: java通用的Excel文件创建方法,支持同文件多tab页创建。只需要调用静态方法,传递List表头和List数据集合等,即可生成Excel文件。 package com.matols.utils; import java.io.File;import java.io.FileInputStream;i ...
java通用的Excel文件创建方法,支持同文件多tab页创建。只需要调用静态方法,传递List表头和List数据集合等,即可生成Excel文件。
  1. package com.matols.utils;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import javax.servlet.http.HttpServletResponse;
  10. import org.apache.poi.hssf.usermodel.HSSFCell;
  11. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  12. import org.apache.poi.hssf.usermodel.HSSFFont;
  13. import org.apache.poi.hssf.usermodel.HSSFRichTextString;
  14. import org.apache.poi.hssf.usermodel.HSSFRow;
  15. import org.apache.poi.hssf.usermodel.HSSFSheet;
  16. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  17. import org.apache.poi.hssf.util.HSSFColor;
  18. import com.google.common.collect.Lists;
  19. /**
  20. * Excel工具类
  21. */
  22. public class ExcelUtils {
  23. public static void main(String[] args) throws Throwable {
  24. String path = "D:/tj/统计报表.xls";
  25. //表头
  26. List<String> headers = Lists.newArrayList();
  27. for (int i = 1; i < 10; i++) {
  28. headers.add("表头"+i);
  29. }
  30. //数据行
  31. List<Map> datas = new ArrayList<Map>();
  32. Map m = null;
  33. for(int i=1;i<10;i++){
  34. m = new HashMap(); //一行数据集
  35. for(int j=0;j<headers.size();j++){
  36. m.put(j, "第"+i+" 行数据:"+j);
  37. }
  38. datas.add(m);
  39. }
  40. ExpExs(path,"","统计报表",headers,datas);
  41. }
  42. /*
  43. * 通用的Excel文件创建方法
  44. * title:首行标题: 2015年度统计报表
  45. * sheets:sheet的tab标签页说明: 15年度报表
  46. * headers:表头:List存放表头 编号、姓名、备注
  47. * datas:数据行:list存放实体数据,map存放具体每一行数据,和headers对应。
  48. * rs:HttpServletResponse响应作用域,如果不为null,会直接将文件流输出到客户端,下载文件
  49. */
  50. public static void ExpExs(String title,String sheets,List headers,List<Map> datas,HttpServletResponse rs){
  51. try {
  52. if(sheets== null || "".equals(sheets)){ sheets = "sheet"; }
  53. HSSFWorkbook workbook = new HSSFWorkbook();
  54. HSSFSheet sheet = workbook.createSheet(sheets); //+workbook.getNumberOfSheets()
  55. HSSFRow row;
  56. HSSFCell cell;
  57. // 设置这些样式
  58. HSSFFont font = workbook.createFont();
  59. font.setFontName(HSSFFont.FONT_ARIAL);//字体
  60. font.setFontHeightInPoints((short) 16);//字号
  61. font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗
  62. //font.setColor(HSSFColor.BLUE.index);//颜色
  63. HSSFCellStyle cellStyle= workbook.createCellStyle(); //设置单元格样式
  64. cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
  65. cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  66. cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER );
  67. cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  68. cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  69. cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
  70. cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  71. cellStyle.setFont(font);
  72. //产生表格标题行
  73. row = sheet.createRow(0);
  74. row.setHeightInPoints(20);
  75. for (int i = 0; i < headers.size(); i++) {
  76. HSSFRichTextString text = new HSSFRichTextString(headers.get(i).toString());
  77. cell = row.createCell(i);
  78. cell.setCellValue(text);
  79. cell.setCellStyle(cellStyle);
  80. }
  81. cellStyle= workbook.createCellStyle();
  82. cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
  83. cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  84. cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  85. cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
  86. cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  87. cellStyle.setDataFormat((short)0x31);//设置显示格式,避免点击后变成科学计数法了
  88. //cellStyle.setWrapText(true);//设置自动换行
  89. Map map;
  90. //遍历集合数据,产生数据行
  91. for (int i=0; i <datas.size(); i++) {
  92. row=sheet.createRow((i+1));
  93. row.setHeightInPoints(20);
  94. map = datas.get(i);
  95. for(int j=0;j<map.size();j++) {
  96. cell = row.createCell(j);
  97. cell.setCellStyle(cellStyle);
  98. cell.setCellType(HSSFCell.CELL_TYPE_STRING);
  99. if(map.get(j) != null) {
  100. cell.setCellValue(new HSSFRichTextString(map.get(j).toString()));
  101. }else{
  102. cell.setCellValue(new HSSFRichTextString(""));
  103. }
  104. }
  105. }
  106. for (int i = 0; i < headers.size(); i++) {
  107. sheet.autoSizeColumn((short)i);
  108. }
  109. rs.reset();
  110. rs.setContentType("multipart/form-data"); //自动识别
  111. rs.setHeader("Content-Disposition","attachment;filename=data.xls");
  112. //文件流输出到rs里
  113. workbook.write(rs.getOutputStream());
  114. rs.getOutputStream().flush();
  115. rs.getOutputStream().close();
  116. } catch (Exception e) {
  117. System.out.println("#Error ["+e.getMessage()+"] ");
  118. }
  119. System.out.println("["+sheets+"] 创建成功...");
  120. System.out.println("");
  121. }
  122. /*
  123. * 通用的Excel文件创建方法
  124. * path:保存路径: C:/xls/统计报表.xls
  125. * title:首行标题: 2015年度统计报表
  126. * sheets:sheet的tab标签页说明: 15年度报表
  127. * headers:表头:List存放表头 编号、姓名、备注
  128. * datas:数据行:list存放实体数据,map存放具体每一行数据,和headers对应。
  129. */
  130. public static void ExpExs(String path,String title,String sheets,List headers,List<Map> datas){
  131. try {
  132. if(sheets== null || "".equals(sheets)){ sheets = "sheet"; }
  133. boolean isExist = new File(path).exists();
  134. if(!isExist){
  135. HSSFWorkbook workbook = new HSSFWorkbook();
  136. HSSFSheet sheet = workbook.createSheet(sheets);
  137. FileOutputStream out = new FileOutputStream(new File(path));
  138. workbook.write(out);
  139. out.flush();
  140. out.close();
  141. }
  142. FileInputStream file = new FileInputStream(new File(path));
  143. HSSFWorkbook workbook = new HSSFWorkbook(file);
  144. HSSFSheet sheet = null;
  145. if(!isExist){
  146. sheet = workbook.getSheetAt(0);
  147. }else{
  148. if(workbook.getSheet(sheets) == null){
  149. sheet = workbook.createSheet(sheets); //+workbook.getNumberOfSheets()
  150. }else{
  151. System.out.println("文件:["+path+"] ["+sheets+"] 已经存在...");
  152. System.out.println("");
  153. return;
  154. }
  155. }
  156. HSSFRow row;
  157. HSSFCell cell;
  158. // 设置这些样式
  159. HSSFFont font = workbook.createFont();
  160. font.setFontName(HSSFFont.FONT_ARIAL);//字体
  161. font.setFontHeightInPoints((short) 16);//字号
  162. font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗
  163. //font.setColor(HSSFColor.BLUE.index);//颜色
  164. HSSFCellStyle cellStyle= workbook.createCellStyle(); //设置单元格样式
  165. cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
  166. cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  167. cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER );
  168. cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  169. cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  170. cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
  171. cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  172. cellStyle.setFont(font);
  173. //产生表格标题行
  174. row = sheet.createRow(0);
  175. row.setHeightInPoints(20);
  176. for (int i = 0; i < headers.size(); i++) {
  177. HSSFRichTextString text = new HSSFRichTextString(headers.get(i).toString());
  178. cell = row.createCell(i);
  179. cell.setCellValue(text);
  180. cell.setCellStyle(cellStyle);
  181. }
  182. cellStyle= workbook.createCellStyle();
  183. cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
  184. cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  185. cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  186. cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
  187. cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  188. cellStyle.setDataFormat((short)0x31);//设置显示格式,避免点击后变成科学计数法了
  189. //cellStyle.setWrapText(true);//设置自动换行
  190. Map map;
  191. //遍历集合数据,产生数据行
  192. for (int i=0; i <datas.size(); i++) {
  193. row=sheet.createRow((i+1));
  194. row.setHeightInPoints(20);
  195. map = datas.get(i);
  196. for(int j=0;j<map.size();j++) {
  197. cell = row.createCell(j);
  198. cell.setCellStyle(cellStyle);
  199. cell.setCellType(HSSFCell.CELL_TYPE_STRING);
  200. if(map.get(j) != null) {
  201. cell.setCellValue(new HSSFRichTextString(map.get(j).toString()));
  202. }else{
  203. cell.setCellValue(new HSSFRichTextString(""));
  204. }
  205. }
  206. }
  207. for (int i = 0; i < headers.size(); i++) {
  208. sheet.autoSizeColumn((short)i);
  209. }
  210. FileOutputStream out = new FileOutputStream(new File(path));
  211. workbook.write(out);
  212. out.flush();
  213. out.close();
  214. /*
  215. HSSFRow row = sheet.createRow(sheets);
  216. HSSFCell cell = null;
  217. cell=row.createCell(sheets);
  218. cell.setCellValue(new HSSFRichTextString("-["+sheets+"]-"));
  219. sheets=sheets+2;//中间空一行
  220. row=sheet.createRow(sheets);
  221. */
  222. } catch (Exception e) {
  223. System.out.println("#Error ["+e.getMessage()+"] ");
  224. }
  225. System.out.println("文件:["+path+"] ["+sheets+"] 创建成功...");
  226. System.out.println("");
  227. }
  228. }
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-8-23 04:32

Copyright 2015-2025 djqfx

返回顶部