首先导入的jar包是poi。
//创建Excel工作簿 HSSFWorkbook workbook=new HSSFWorkbook(); //创建一个工作表sheet HSSFSheet sheet=workbook.createSheet(); //创建第一行 HSSFRow row=sheet.createRow(0);
//下面是对行进行操作
/** * firstRow:起始行 * lastRow:结束行<这两个主要是用来合并列单元格的,行数是从0开始> * firstCol:开始列 * lastCol:结束列<这两个主要是用来合并行单元格的,也是从0开始> * <这4个参数搭配配合就可以随意的设置各种行列合并了> */ sheet.addMergedRegion(new CellRangeAddress(0, 2, 0, 12));//合并2行12列,留一片空白放标题,并居中显示 HSSFCell cell1=row.createCell(0);//设置主标题 cell1.setCellValue(theme);
//获取样式,这里的样式设置的是整个Excel表的
HSSFCellStyle cellStyle=cell1.getCellStyle();//获取样式对象 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置水平居中 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置垂直居中//由于前面合并了两行,所以直接从第三行开始,
//每次设置行数据都需要重新去获取那一行的对象
//每一个单元格的合并都需要调用一次new cellRangeAddress(0,0,0,0)
row=sheet.createRow(3); sheet.addMergedRegion(new CellRangeAddress(3, 4, 0, 0)); row.createCell(0).setCellValue("序号"); sheet.addMergedRegion(new CellRangeAddress(3, 4, 1, 1)); row.createCell(1).setCellValue("单位"); sheet.addMergedRegion(new CellRangeAddress(3, 4, 2, 2)); row.createCell(2).setCellValue("姓名"); sheet.addMergedRegion(new CellRangeAddress(3, 4, 3, 3)); row.createCell(3).setCellValue("性别");
//下面再录入具体显示数据就可以进行遍历了,就不再进行记录了
//样式还有很多可以设置字体大小颜色,背景颜色,单元格高度,去除边框等等,因为这次项目没有涉及到,所以还未使用过,记录下方便以后查找
/*=================================以下是word的导出===========================================*/
//需要导出的包是freemarker
//首先需要用word写完文档布局,在需要录入数据的地方存一些字母当做变量,然后将文档另存为word 2003 xml格式
//将这个xml文件中需要录入的数据都改为类似${name}格式,方便之后动态传值,修改完之后将文件后缀修改为ftl
//开始读取数据
Configuration configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); configuration.setClassForTemplateLoading(this.getClass(), "/"); //FTL文件所存在的位置 Template t=null; File file = null; InputStream fin = null; ServletOutputStream out = null; try { String name = "会员申请.doc";//当初文件名 file = new File(name); t = configuration.getTemplate("clubTemp.ftl"); //文件名 Writer w = new OutputStreamWriter(new FileOutputStream(file), "utf-8"); t.process(dataMap, w);//dataMap是Map对象 fin = new FileInputStream(file); response.setCharacterEncoding("utf-8"); response.setContentType("application/msword"); // 设置浏览器以下载的方式处理该文件名 String fileName = "会员申请"+Math.random()*10000 + ".doc"; response.setHeader("Content-Disposition", "attachment;filename=" .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8")))); out = response.getOutputStream(); byte[] buffer = new byte[512]; // 缓冲区 int bytesToRead = -1; // 通过循环将读入的Word文件的内容输出到浏览器中 while((bytesToRead = fin.read(buffer)) != -1) { out.write(buffer, 0, bytesToRead); }
} catch (Exception e) { e.printStackTrace(); } finally { try { if(fin != null) fin.close(); if(out != null) out.close(); if(file != null) file.delete(); // 删除临时文件 } catch (IOException e) { e.printStackTrace(); } }