标签:
public ActionResult excelPrint() { HSSFWorkbook workbook = new HSSFWorkbook();// 创建一个Excel文件 HSSFSheet sheet = workbook.createSheet();// 创建一个Excel的Sheet sheet.createFreezePane(1, 3);// 冻结 // 设置列宽 sheet.setColumnWidth(0, 1000); sheet.setColumnWidth(1, 3500); sheet.setColumnWidth(2, 3500); sheet.setColumnWidth(3, 6500); sheet.setColumnWidth(4, 6500); sheet.setColumnWidth(5, 6500); sheet.setColumnWidth(6, 6500); sheet.setColumnWidth(7, 2500); // Sheet样式 HSSFCellStyle sheetStyle = workbook.createCellStyle(); // 背景色的设定 sheetStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); // 前景色的设定 sheetStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); // 填充模式 sheetStyle.setFillPattern(HSSFCellStyle.FINE_DOTS); // 设置列的样式 for (int i = 0; i <= 14; i++) { sheet.setDefaultColumnStyle((short) i, sheetStyle); } // 设置字体 HSSFFont headfont = workbook.createFont(); headfont.setFontName("黑体"); headfont.setFontHeightInPoints((short) 22);// 字体大小 headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗 // 另一个样式 HSSFCellStyle headstyle = workbook.createCellStyle(); headstyle.setFont(headfont); headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 headstyle.setLocked(true); headstyle.setWrapText(true);// 自动换行 // 另一个字体样式 HSSFFont columnHeadFont = workbook.createFont(); columnHeadFont.setFontName("宋体"); columnHeadFont.setFontHeightInPoints((short) 10); columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 列头的样式 HSSFCellStyle columnHeadStyle = workbook.createCellStyle(); columnHeadStyle.setFont(columnHeadFont); columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 columnHeadStyle.setLocked(true); columnHeadStyle.setWrapText(true); columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);// 左边框的颜色 columnHeadStyle.setBorderLeft((short) 1);// 边框的大小 columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);// 右边框的颜色 columnHeadStyle.setBorderRight((short) 1);// 边框的大小 columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体 columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色 // 设置单元格的背景颜色(单元格的样式会覆盖列或行的样式) columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index); HSSFFont font = workbook.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short) 10); // 普通单元格样式 HSSFCellStyle style = workbook.createCellStyle(); style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下居中 style.setWrapText(true); style.setLeftBorderColor(HSSFColor.BLACK.index); style.setBorderLeft((short) 1); style.setRightBorderColor(HSSFColor.BLACK.index); style.setBorderRight((short) 1); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体 style.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色. style.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色. // 另一个样式 HSSFCellStyle centerstyle = workbook.createCellStyle(); centerstyle.setFont(font); centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 centerstyle.setWrapText(true); centerstyle.setLeftBorderColor(HSSFColor.BLACK.index); centerstyle.setBorderLeft((short) 1); centerstyle.setRightBorderColor(HSSFColor.BLACK.index); centerstyle.setBorderRight((short) 1); centerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体 centerstyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色. centerstyle.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色. try { // 创建第一行 HSSFRow row0 = sheet.createRow(0); // 设置行高 row0.setHeight((short) 900); // 创建第一列 HSSFCell cell0 = row0.createCell(0); cell0.setCellValue(new HSSFRichTextString("中非发展基金投资项目调度会工作落实情况对照表")); cell0.setCellStyle(headstyle); /** * 合并单元格 * 第一个参数:第一个单元格的行数(从0开始) * 第二个参数:第二个单元格的行数(从0开始) * 第三个参数:第一个单元格的列数(从0开始) * 第四个参数:第二个单元格的列数(从0开始) */ CellRangeAddress range = new CellRangeAddress(0, 0, 0, 7); sheet.addMergedRegion(range); // 创建第二行 HSSFRow row1 = sheet.createRow(1); HSSFCell cell1 = row1.createCell(0); cell1.setCellValue(new HSSFRichTextString("本次会议时间:2009年8月31日 前次会议时间:2009年8月24日")); cell1.setCellStyle(centerstyle); // 合并单元格 range = new CellRangeAddress(1, 2, 0, 7); sheet.addMergedRegion(range); // 第三行 HSSFRow row2 = sheet.createRow(3); row2.setHeight((short) 750); HSSFCell cell = row2.createCell(0); cell.setCellValue(new HSSFRichTextString("责任者")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(1); cell.setCellValue(new HSSFRichTextString("成熟度排序")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(2); cell.setCellValue(new HSSFRichTextString("事项")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(3); cell.setCellValue(new HSSFRichTextString("前次会议要求/n/新项目的项目概要")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(4); cell.setCellValue(new HSSFRichTextString("上周工作进展")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(5); cell.setCellValue(new HSSFRichTextString("本周工作计划")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(6); cell.setCellValue(new HSSFRichTextString("问题和建议")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(7); cell.setCellValue(new HSSFRichTextString("备 注")); cell.setCellStyle(columnHeadStyle); // 访问数据库,得到数据集 List deitelVOList = getEntityManager().queryDeitelVOList(); int m = 4; int k = 4; for (int i = 0; i < deitelVOList.size(); i++) { DeitelVO vo = deitelVOList.get(i); String dname = vo.getDname(); List workList = vo.getWorkInfoList(); HSSFRow row = sheet.createRow(m); cell = row.createCell(0); cell.setCellValue(new HSSFRichTextString(dname)); cell.setCellStyle(centerstyle); // 合并单元格 range = new CellRangeAddress(m, m + workList.size() - 1, 0, 0); sheet.addMergedRegion(range); m = m + workList.size(); for (int j = 0; j < workList.size(); j++) { Workinfo w = workList.get(j); // 遍历数据集创建Excel的行 row = sheet.getRow(k + j); if (null == row) { row = sheet.createRow(k + j); } cell = row.createCell(1); cell.setCellValue(w.getWnumber()); cell.setCellStyle(centerstyle); cell = row.createCell(2); cell.setCellValue(new HSSFRichTextString(w.getWitem())); cell.setCellStyle(style); cell = row.createCell(3); cell.setCellValue(new HSSFRichTextString(w.getWmeting())); cell.setCellStyle(style); cell = row.createCell(4); cell.setCellValue(new HSSFRichTextString(w.getWbweek())); cell.setCellStyle(style); cell = row.createCell(5); cell.setCellValue(new HSSFRichTextString(w.getWtweek())); cell.setCellStyle(style); cell = row.createCell(6); cell.setCellValue(new HSSFRichTextString(w.getWproblem())); cell.setCellStyle(style); cell = row.createCell(7); cell.setCellValue(new HSSFRichTextString(w.getWremark())); cell.setCellStyle(style); } k = k + workList.size(); } // 列尾 int footRownumber = sheet.getLastRowNum(); HSSFRow footRow = sheet.createRow(footRownumber + 1); HSSFCell footRowcell = footRow.createCell(0); footRowcell.setCellValue(new HSSFRichTextString(" 审 定:XXX 审 核:XXX 汇 总:XX")); footRowcell.setCellStyle(centerstyle); range = new CellRangeAddress(footRownumber + 1, footRownumber + 1, 0, 7); sheet.addMergedRegion(range); HttpServletResponse response = getResponse(); HttpServletRequest request = getRequest(); String filename = "未命名.xls";//设置下载时客户端Excel的名称 // 请见:http://zmx.javaeye.com/blog/622529 filename = Util.encodeFilename(filename, request); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=" + filename); OutputStream ouputStream = response.getOutputStream(); workbook.write(ouputStream); ouputStream.flush(); ouputStream.close(); } catch (Exception e) { e.printStackTrace(); } return null; } -------------------------------->>其他应用参考指南: 你可以使用开源的jexcel 的jar包里面有 Java == excel 的相互读写。 导入到Java后再写入数据库就方便了 附上使用方法: 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: 使用如下: 搭建环境 将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。 基本操作 一、创建文件 拟生成一个名为“test.xls”的Excel文件,其中第一个工作表被命名为 “第一页”,大致效果如下: Java代码 1. package test; 2. 3. // 生成Excel的类 4. import java.io.File; 5. 6. import jxl.Workbook; 7. import jxl.write.Label; 8. import jxl.write.WritableSheet; 9. import jxl.write.WritableWorkbook; 10. 11. public class CreateExcel { 12. public static void main(String args[]) { 13. try { 14. // 打开文件 15. WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " )); 16. // 生成名为“第一页”的工作表,参数0表示这是第一页 17. WritableSheet sheet = book.createSheet( " 第一页 " , 0 ); 18. // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) 19. // 以及单元格内容为test 20. Label label = new Label( 0 , 0 , " test " ); 21. 22. // 将定义好的单元格添加到工作表中 23. sheet.addCell(label); 24. 25. /**/ /* 26. * 生成一个保存数字的单元格 必须使用Number的完整包路径,否则有语法歧义 单元格位置是第二列,第一行,值为789.123 27. */ 28. jxl.write.Number number = new jxl.write.Number( 1 , 0 , 555.12541 ); 29. sheet.addCell(number); 30. 31. // 写入数据并关闭文件 32. book.write(); 33. book.close(); 34. 35. } catch (Exception e) { 36. System.out.println(e); 37. } 38. } 39. 编译执行后,会产生一个Excel文件。 三、读取文件 以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下: Java代码 1. package test; 2. 3. // 读取Excel的类 4. import java.io.File; 5. 6. import jxl.Cell; 7. import jxl.Sheet; 8. import jxl.Workbook; 9. 10. public class ReadExcel { 11. public static void main(String args[]) { 12. try { 13. Workbook book = Workbook.getWorkbook( new File( " test.xls " )); 14. // 获得第一个工作表对象 15. Sheet sheet = book.getSheet( 0 ); 16. // 得到第一列第一行的单元格 17. Cell cell1 = sheet.getCell( 0 , 0 ); 18. String result = cell1.getContents(); 19. System.out.println(result); 20. book.close(); 21. } catch (Exception e) { 22. System.out.println(e); 23. } 24. } 25. 程序执行结果:test 四、修改文件 利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外, 其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表: Java代码 1. package test; 2. 3. import java.io.File; 4. 5. import jxl.Workbook; 6. import jxl.write.Label; 7. import jxl.write.WritableSheet; 8. import jxl.write.WritableWorkbook; 9. 10. public class UpdateExcel { 11. public static void main(String args[]) { 12. try { 13. // Excel获得文件 14. Workbook wb = Workbook.getWorkbook( new File( " test.xls " )); 15. // 打开一个文件的副本,并且指定数据写回到原文件 16. WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ), 17. wb); 18. // 添加一个工作表 19. WritableSheet sheet = book.createSheet( " 第二页 " , 1 ); 20. sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据 " )); 21. book.write(); 22. book.close(); 23. } catch (Exception e) { 24. System.out.println(e); 25. } 26. } 27. 其他操作 一、 数据格式化 在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。 1、 字串格式化 字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和 WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句, 为方便叙述,我们为每一行命令加了编号: Java代码 1. WritableFont font1 = 2. new WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD); ① 3. 4. WritableCellFormat format1 = new WritableCellFormat(font1); ② 5. 6. Label label = new Label( 0 , 0 ,”data 4 test”,format1) ③ 7. 8. 9. 其中①指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的 10. 构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。 11. 12. ②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种 13. 属性,后面的单元格格式化中会有更多描述。 14. 15. ③处使用了Label类的构造子,指定了字串被赋予那种格式。 16. 17. 在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们 18. 上面的实例,可以指定: 19. 20. // 把水平对齐方式指定为居中 21. format1.setAlignment(jxl.format.Alignment.CENTRE); 22. 23. // 把垂直对齐方式指定为居中 24. format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); 二、单元格操作 Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI 提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。 1、 合并单元格 Java代码 1. WritableSheet.mergeCells( int m, int n, int p, int q); 2. 3. // 作用是从(m,n)到(p,q)的单元格全部合并,比如: 4. WritableSheet sheet = book.createSheet(“第一页”, 0 ); 5. 6. // 合并第一列第一行到第六列第一行的所有单元格 7. sheet.mergeCells( 0 , 0 , 5 , 0 ); 合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。 3、用于Excel视图的视图子类化 为了在生成输出文档的过程中实现定制的行为,我们将继承合适的抽象类。对于Excel,这包括提供一个 org.springframework.web.servlet.view.document.AbstractExcelView的子类,并实现 buildExcelDocument方法。 Java代码 1. public class ViewExcel extends AbstractExcelView { 2. 3. public void buildExcelDocument( 4. Map model, HSSFWorkbook workbook, 5. HttpServletRequest request, HttpServletResponse response) 6. throws Exception { 7. 8. HSSFSheet sheet = workbook.createSheet("list"); 9. sheet.setDefaultColumnWidth((short) 12); 10. 11. 12. HSSFCell cell = getCell(sheet, 0, 0); 13. setText(cell, "Spring Excel test"); 14. 15. HSSFCellStyle dateStyle = workbook.createCellStyle(); 16. dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy")); 17. cell = getCell(sheet, 1, 0); 18. cell.setCellValue(new Date()); 19. cell.setCellStyle(dateStyle); 20. getCell(sheet, 2, 0).setCellValue(458); 21. 22. HSSFRow sheetRow = sheet.createRow(3); 23. for (short i = 0; i < 10; i++) { 24. sheetRow.createCell(i).setCellValue(i * 10); 25. } 26. 27. } 28. 29. }
标签:
原文地址:http://www.cnblogs.com/zjbky/p/5725644.html