java_Excel 导出
1 package Demo; 2 3 import java.io.IOException; 4 import java.io.OutputStream; 5 import java.io.PrintWriter; 6 import java.text.SimpleDateFormat; 7 import java.util.Date; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 14 import org.apache.poi.hssf.usermodel.HSSFCell; 15 import org.apache.poi.hssf.usermodel.HSSFCellStyle; 16 import org.apache.poi.hssf.usermodel.HSSFFont; 17 import org.apache.poi.hssf.usermodel.HSSFRow; 18 import org.apache.poi.hssf.usermodel.HSSFSheet; 19 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 20 import org.apache.poi.hssf.util.CellRangeAddress; 21 import org.apache.poi.hssf.util.HSSFColor; 22 23 public class Excel2 extends HttpServlet { 24 25 public void doPost(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 response.setContentType("text/html"); 28 PrintWriter out = response.getWriter(); 29 try { 30 response.reset(); // 必须重置一下,不然必报错 31 // 创建HSSFWorkbook对象 (Excel文档对象) 32 HSSFWorkbook hw = new HSSFWorkbook(); 33 // 创建sheet对象 (excel表单) 34 HSSFSheet sheet = hw.createSheet("成绩表"); 35 /** 36 * 基本字体 样式 居中 大小 37 */ 38 HSSFFont font = hw.createFont(); 39 font.setFontName(HSSFFont.FONT_ARIAL); 40 font.setFontHeightInPoints((short) 10); 41 /** 42 * 单元格样式style 43 */ 44 HSSFCellStyle style = hw.createCellStyle(); 45 style.setFont(font); 46 style.setBorderTop((short) 1); // 上 47 style.setBorderBottom((short) 1); // 下 48 style.setBorderLeft((short) 1); // 左 49 style.setBorderBottom((short) 1); // 右 50 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); 51 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 52 style.setWrapText(true); 53 /** 54 * 列表头 单元格样式 titlefont 55 */ 56 HSSFFont titlefont = hw.createFont(); 57 titlefont.setFontName("微软雅黑"); 58 titlefont.setFontHeightInPoints((short) 10); 59 titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 60 /** 61 * titleCellStyle 62 */ 63 HSSFCellStyle titleCellStyle = hw.createCellStyle(); 64 titleCellStyle.setFont(titlefont); 65 titleCellStyle.setBorderTop((short) 1); // 上 66 titleCellStyle.setBorderBottom((short) 1); // 下 67 titleCellStyle.setBorderLeft((short) 1); // 左 68 titleCellStyle.setBorderBottom((short) 1); // 右 69 // 设置 对其方式 水平对齐 align center 居中 70 titleCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); 71 // 垂直对齐 居中 72 titleCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 73 titleCellStyle.setWrapText(true); // 是否自动换行 74 // 选择用户填充模式 75 titleCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 76 // 设置单元格填充样式 77 titleCellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); 78 /** 79 * 标题头 字体 样式 headFont 80 */ 81 HSSFFont headFont = hw.createFont(); 82 headFont.setFontHeightInPoints((short) 18); // 列宽 83 headFont.setFontName("微软雅黑"); // 字体 84 headFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 粗体 85 /** 86 * headStyle 87 */ 88 HSSFCellStyle headStyle = hw.createCellStyle(); 89 headStyle.setFont(headFont); 90 // 段落对其方式 ALIGN_CENTER_SELECTION 居中 91 headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION); 92 93 // 在sheet里创建第一行,,参数为行的索引(excel的行) 可以死0~65535之间的任意 94 HSSFRow headRow = sheet.createRow(0); 95 // 创建单元格 参数为列索引 ,可以死0~255之间的任意 96 HSSFCell cell = headRow.createCell(0); 97 cell.setCellValue("学生表"); // 设置单元格内容 98 // 合并单元格 CellRangeAddress() 构造参数依次表示 起始行 截止行 起始列 截止列 99 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 6)); 100 cell.setCellStyle(headStyle); 101 // 创建第二行 102 HSSFRow row2 = sheet.createRow(1); 103 String[] arr = { "年级", "班级", "姓名", "性别", "年龄", "职务", "成绩", }; 104 /** 105 * 为单元格赋值(列名) 106 */ 107 for (int i = 0; i < arr.length; i++) { 108 HSSFCell cell2 = row2.createCell((short) i);// 创建单元格 i第几个(索引) 109 sheet.setColumnWidth(i, 5000); // 列宽 110 cell2.setCellValue((String) arr[i]); // 列名 111 cell2.setCellStyle(titleCellStyle); // 列样式 112 } 113 /** 114 * 数据集 115 */ 116 String[][] arrs = { 117 { "高一", "六班", "阿杰", "男", "18", "劳动委员", "86" }, 118 { "高二", "七班", "阿明", "男", "19", "体育委员", "54" }, 119 { "高三", "八班", "阿敏", "女", "20", "文艺委员", "56" }, 120 { "初一", "九班", "阿梅", "女", "18", "生活委员", "78" }, 121 { "高四", "十班", "阿刚", "男", "19", "纪录委员", "65" } 122 }; 123 int createRow = 2; 124 /** 125 * 为单元格赋值 赋样式 126 */ 127 for (int i = 0; i < arrs.length; i++) { 128 //创建行 前面占了两行 现在从第三行 算起 129 HSSFRow GetRow = sheet.createRow(createRow); 130 GetRow.setHeight((short) 400); //单元格height高度 131 int count = 0; 132 HSSFCell SetCell = null; //创建单元格 133 for (int j = 0; j < arrs[i].length; j++) { 134 String string = arrs[i][j]; //得到单元格数据 135 SetCell = GetRow.createCell(count); //创建单元格到第几列 136 SetCell.setCellStyle(style);// 设置当前单元格的样式 137 SetCell.setCellValue(string);// 设置当前单元格的显示文本 138 count++; // 列单元格索引 139 } 140 createRow++; // 行单元格索引 141 } 142 143 //日期: 左对齐 144 HSSFRow RowTime = sheet.createRow(createRow+4);//创建一行 145 HSSFCell cellTime = RowTime.createCell(arr.length-1);//创建单元格 146 HSSFCellStyle timeStyle = hw.createCellStyle(); //创建单元格样式 147 timeStyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);//文字左对齐 148 cellTime.setCellStyle(timeStyle); //设置单元格样式 149 cellTime.setCellValue("日期:"); //设置value 150 //2015-01-31 左对齐 151 HSSFRow EndRow = sheet.createRow(createRow+5); 152 HSSFCell EndCell = EndRow.createCell(arr.length-1); 153 HSSFCellStyle endStyle=hw.createCellStyle(); 154 endStyle.setAlignment((short) HSSFCellStyle.ALIGN_LEFT);//文字左对齐 155 endStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);//单元格颜色自定义 156 endStyle.setFillForegroundColor(HSSFColor.RED.index); //设定颜色 157 EndCell.setCellStyle(endStyle); 158 /** 159 * 获取 本地时间(服务器时间) 160 */ 161 Date now = new Date(); 162 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 163 EndCell.setCellValue(dateFormat.format(now)); 164 // 输出Excel 165 OutputStream outputStream = response.getOutputStream(); 166 response.setHeader("Content-Disposition", "attachment;filename=" 167 + System.currentTimeMillis() + ".xls");// filename 保存文件的名字 168 // 设置ASP输出的文档MIME类型 msexcel 表格 169 response.setContentType("application/msexcel"); 170 hw.write(outputStream); // 写 171 } catch (RuntimeException e) { 172 // TODO Auto-generated catch block 173 e.printStackTrace(); 174 } 175 out.flush(); 176 out.close(); 177 } 178 }