- 浏览: 24319 次
- 性别:
- 来自: 大连
-
最新评论
-
suhongliang5332:
liu_bia 写道这个显示的界面是怎样的?可以直接在html ...
Struts2+freemarker实现动态表头输出 -
liu_bia:
这个显示的界面是怎样的?
Struts2+freemarker实现动态表头输出 -
suhongliang5332:
模板模式(Template Method) -
suhongliang5332:
模板模式(Template Method)
导入包
dom4j-1.6.1.jar
poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
stax-api-1.0.1.jar
xmlbeans-2.3.0.jar
------------Excel导出------------------
Excel接口类
Excel抽象类
Excel2007
Excel2003
调用
------------Excel导入------------------
上传Excel文件
读取Excel文件
dom4j-1.6.1.jar
poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
stax-api-1.0.1.jar
xmlbeans-2.3.0.jar
------------Excel导出------------------
Excel接口类
package com.XXX.lib.global.excel; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import com.XXXX.lib.fintface.IdentiIntface; public interface ExcelObjIntface { /** * excel下载 */ public void excelDownLoad(); /** * 创建一个Excel * @return */ public Workbook creatWorkBook(); /** * 创建一个sheet数组 * @param sheetNames * @return */ public ArrayList<Sheet> creatSheet(ArrayList<String> sheetNames); /** * 创建一个sheet * @param sheetName * @return */ public Sheet creatSheet(String sheetName); /** * 创建一个简单头部 * @param sheet * @param headValues * @return */ public int creatSheetHeads(Sheet sheet,List<String> headValues); /** * 根据HashMap生成数据 * @param sheet sheet * @param cellValues * @return */ public int creatSheetCellsByMap(Sheet sheet, List<Map<Object, Object>> cellValues); /** * 根据模型生成数据 * @param sheet sheet * @param model 模型列表 * @return 生成最后一条数据所在的行数 */ public int creatSheetCellsByModel(Sheet sheet,List<IdentiIntface> model); /** * 结束并生成Excel * @param ExcelName,Excel的名称 */ public void finishWorkBook(String ExcelName); /** * 获得一个workBook; * @param ExcelFullName * @return */ public Workbook getReadExcel(String ExcelFullName); /** * 获得一个sheet * @param readwb * @return */ public Sheet getReadSheet(int sheetAt); /** * 获得一个制定的值 * @param sheet * @param row * @param cell * @return */ public String getReadCellValue(Sheet sheet,int rowNum,int cellNum); public void init(); }
Excel抽象类
package com.XXX.lib.global.excel; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import com.XXX.lib.fintface.IdentiIntface; import com.XXX.lib.global.constant.ExcelConstant; import com.XXX.lib.global.util.ClassUtil; /** * http://poi.apache.org/spreadsheet/quick-guide.html#NewSheet * Excel父类,抽象类 */ public abstract class ExcelObjAbstract implements ExcelObjIntface{ protected Workbook wb; private Workbook readwb; private List<Object> heads; private int startCols;//输出开始列 private int startRows;//输出开始行 private int headHeight;//设置头部高度 private int bodyHeight;//设置身体高度 private String Suffix; public ExcelObjAbstract(){ this.excelDownLoad(); } @Override public ArrayList<Sheet> creatSheet(ArrayList<String> sheetNames) { ArrayList<Sheet> sheetArray = new ArrayList<Sheet>(); for (String sheetName : sheetNames) { Sheet tmpsheet = wb.createSheet(sheetName); sheetArray.add(tmpsheet); } return sheetArray; } @Override public Sheet creatSheet(String sheetName) { Sheet sheet = wb.createSheet(sheetName); return sheet; } @Override public int creatSheetHeads(Sheet sheet, List<String> headValues) { HashMap<String, CellStyle> styles = this.headStyle(); heads = new ArrayList<Object>(); Row row = sheet.createRow(startRows);//第一行 if(headHeight!=0){ row.setHeight((short)headHeight); } for(int i=0;i<headValues.size();i++) { String[] keys = headValues.get(i).split(","); heads.add(keys[0]);//把列名放到集合中 Cell cell = row.createCell(i+startCols); cell.setCellStyle(styles.get("headBlack4")); if(keys.length>=2){//第二项存在[并且语言为中文] cell.setCellValue(keys[1]); } // else if(keys.length>=3){//第三项存在[并且语言为韩文] // cell.setCellValue(keys[2]); // } if(keys.length>=4){//第四项存在,就设置列宽[注:第四个字段为最大字符串长度] sheet.setColumnWidth(i+startCols, Integer.parseInt(keys[3])*256); } //默认 } return headValues.size(); } @Override public int creatSheetCellsByMap(Sheet sheet, List<Map<Object, Object>> cellValues) { HashMap<String, CellStyle> styles = this.bodyStyle(); for(int i=0;i<cellValues.size();i++) { Row row = sheet.createRow(startRows+i+1);//因为第一行为题目,故从第二行开始输出正文 if(bodyHeight!=0){ row.setHeight((short)bodyHeight); } for(int j=0;j<cellValues.get(i).size();j++) { Cell cell = row.createCell(j); Object eValue = cellValues.get(i).get(heads.get(j)); if(eValue==null){ eValue = " "; } cell.setCellValue(eValue.toString()); cell.setCellStyle(styles.get("bodyBlack4")); } } return cellValues.size(); } @Override public int creatSheetCellsByModel(Sheet sheet,List<IdentiIntface> modelList){ HashMap<String, CellStyle> styles = this.bodyStyle(); for(int i=0;i<modelList.size();i++) { Row row = sheet.createRow(startRows+i+1);//因为第一行为题目,故从第二行开始输出正文 if(bodyHeight!=0){ row.setHeight((short)bodyHeight); } for(int j=0;j<heads.size();j++) { Cell cell = row.createCell(startCols+j); //通过字符串获得属性值 Object eValue = ClassUtil.getFieldValueByName(heads.get(j).toString(),modelList.get(i)); if(eValue==null){ eValue = " "; } cell.setCellValue(eValue.toString()); cell.setCellStyle(styles.get("bodyBlack4")); } } return modelList.size(); } @Override public void finishWorkBook(String ExcelName) { String realExcelName = ExcelConstant.DEFAULT_OUT_PATH+ExcelName+Suffix; try { FileOutputStream fileOut = new FileOutputStream(realExcelName); wb.write(fileOut); fileOut.close(); } catch (Exception e) { e.printStackTrace(); } } //内容样式集合 private HashMap<String, CellStyle> bodyStyle(){ HashMap<String, CellStyle> styles = new HashMap<String, CellStyle>(); //内容样式一: 四个边框 黑色,无底色,上下居中,左右居中 CellStyle style = wb.createCellStyle(); //设置字体 Font headFont = wb.createFont(); headFont.setFontHeightInPoints((short)9); headFont.setColor(IndexedColors.BLACK.getIndex()); headFont.setFontName("宋体"); style.setFont(headFont); //设置边框 style.setBorderBottom(CellStyle.BORDER_THIN); style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderLeft(CellStyle.BORDER_THIN); style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderRight(CellStyle.BORDER_THIN); style.setRightBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderTop(CellStyle.BORDER_THIN); style.setTopBorderColor(IndexedColors.BLACK.getIndex()); //设置居中 style.setAlignment(CellStyle.ALIGN_CENTER); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); styles.put("bodyBlack4", style); return styles; } //头部样式集合 private HashMap<String, CellStyle> headStyle(){ HashMap<String, CellStyle> styles = new HashMap<String, CellStyle>(); // 头部样式一: 四个边框 黑色,深灰色底色,上下居中,左右居中 CellStyle style = wb.createCellStyle(); //设置字体 Font headFont = wb.createFont(); headFont.setFontHeightInPoints((short)11); headFont.setBoldweight(Font.BOLDWEIGHT_BOLD); headFont.setColor(IndexedColors.BLACK.getIndex()); headFont.setFontName("宋体"); style.setFont(headFont); //设置边框 style.setBorderBottom(CellStyle.BORDER_THIN); style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderLeft(CellStyle.BORDER_THIN); style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderRight(CellStyle.BORDER_THIN); style.setRightBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderTop(CellStyle.BORDER_THIN); style.setTopBorderColor(IndexedColors.BLACK.getIndex()); //设置背景颜色 style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); //设置居中 style.setAlignment(CellStyle.ALIGN_CENTER); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); styles.put("headBlack4", style); return styles; } @Override public Workbook getReadExcel(String ExcelFullName) { try{ InputStream inp = new FileInputStream(ExcelFullName); readwb = WorkbookFactory.create(inp); }catch (Exception e) { e.printStackTrace(); } return readwb; } @Override public Sheet getReadSheet(int sheetAt) { return readwb.getSheetAt(sheetAt); } @Override public String getReadCellValue(Sheet sheet, int rowNum, int cellNum) { Row row = sheet.getRow(rowNum); Cell cell = row.getCell(cellNum); return cell.toString(); } @Override public void excelDownLoad() { this.init(); this.creatWorkBook(); this.setStartColsRows(1, 1); } /** * 集中设置开始行列 * @param startCols * @param startRows */ public void setStartColsRows(int startCols,int startRows){ this.setStartCols(startCols); this.setStartRows(startRows); } /** * 集中设置高度 * @param headHeight * @param bodyHeight */ public void setHeadBodyHeight(int headHeight,int bodyHeight){ this.setHeadHeight(headHeight); this.setBodyHeight(bodyHeight); } public int getStartCols() { return startCols; } public void setStartCols(int startCols) { this.startCols = startCols; } public int getStartRows() { return startRows; } public void setStartRows(int startRows) { this.startRows = startRows; } public String getSuffix() { return Suffix; } public void setSuffix(String suffix) { Suffix = suffix; } public int getHeadHeight() { return headHeight; } public void setHeadHeight(int headHeight) { this.headHeight = headHeight; } public int getBodyHeight() { return bodyHeight; } public void setBodyHeight(int bodyHeight) { this.bodyHeight = bodyHeight; } }
Excel2007
package com.XXX.lib.global.excel; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Excel2007 extends ExcelObjAbstract{ public Excel2007(){ super(); } @Override public Workbook creatWorkBook() { wb = new XSSFWorkbook(); return wb; } public void init(){ super.setSuffix(".xlsx"); } }
Excel2003
package com.XXX.lib.global.excel; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; public class Excel2003 extends ExcelObjAbstract{ public Excel2003(){ super(); } @Override public Workbook creatWorkBook() { wb = new HSSFWorkbook(); return wb; } public void init(){ super.setSuffix(".xls"); } }
调用
String fj = excelDate.format(new Date()); List<String> headMas= new ArrayList<String>(); headMas.add("lodging_id,xx,i,20"); headMas.add("room_count,xx,i"); String fileName = "xx"+fj; Excel2007 excel2007 = new Excel2007(); Sheet sheet = excel2007.creatSheet("xx"); excel2007.creatSheetHeads(sheet,headMas); excel2007.creatSheetCellsByModel(sheet, result); excel2007.finishWorkBook(fileName);
------------Excel导入------------------
上传Excel文件
public String fileUpload(){ File[] srcfiles = updExcel; if( srcfiles != null ){ for(int i=0;i<srcfiles.length;i++){ int fileId = lodgService.seqkey();//唯一id SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); String tmpStr = sdf.format(new Date()); String tmpYyyymm = tmpStr; String fileName = updExcelFileName[i];//文件名称 String extension = FileUtil.getFileExtension(fileName);//类型 if(extension.equals(".xlsm")){ String newFileName = "xxxx"+fileId+".xlsm";//新文件名 String filePath = Constant.FILE_DEFAULT_UPLOAD + tmpYyyymm + "_" + newFileName; File file = new File(filePath); FileUtil.copy(updExcel[i], file); if(excelInAppoint(filePath)){ this.setInfoString("Excel导入成功"); }else{ this.setInfoString("Excel导入失败"); } } } } search(); return "fileUpload"; }
读取Excel文件
private boolean excelInAppoint(String filePath){ Excel2007 excel2007 = new Excel2007(); excel2007.getReadExcel(filePath); Sheet sheet = excel2007.getReadSheet(0); //TODO 生成服务器端校验码 String testStr = excel2007.getReadCellValue(sheet, 1, 2);//获得客户端校验码 String[] testArr = testStr.split("-"); SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd"); String tmpStr = sdf.format(new Date()); int totleCols = Integer.parseInt(testArr[4]); if( tmpStr.equals(testArr[0]) && testArr[1].equals("0")){ for(int i=4;i<totleCols;i++){//遍历所有行 //TODO 插入数据 lodgModel.setLodging_id(excel2007.getReadCellValue(sheet, i, 1)); lodgModel.setAp_date(excel2007.getReadCellValue(sheet, i, 2)); lodgModel.setAp_code(excel2007.getReadCellValue(sheet, i, 3)); lodgModel.setCuser(excel2007.getReadCellValue(sheet, i, 4)); lodgModel.setStatus(excel2007.getReadCellValue(sheet, i, 5)); lodgModel.setEmpno(excel2007.getReadCellValue(sheet, i, 6)); empInto(); } return true; }else{ return false; } }
发表评论
-
css3再学习
2014-09-04 08:55 0引言: 最近重新学习了css,发现自己许多 ... -
JqGrid的Java模板类
2013-06-28 16:14 1034这段时间一直在使用Spring+JqGrid+Mybatis ... -
全新的梦
2013-06-24 17:28 0项目管理软件:redmine 统一邮箱:(姓名全拼)ln ... -
Struts2+freemarker实现动态表头输出
2013-05-09 15:07 2068首先创建一个树的节点 package com.stxda ... -
Spring3.2.2开发与整合+整合JSTL
2013-05-08 13:08 1276一个新项目是用spring来开发的,我也是第一次接触,但是感 ... -
Struts2整合图表工具 JFreeChart
2013-04-15 17:18 10521首先下载和安装最新的jcommon http://so ... -
Java单元测试与Jutil详解(二) 开发步骤
2013-01-29 10:55 14791.Jutil的开发流程 一)编写单元级测试代码-> ... -
Java单元测试与Jutil详解(一) 简介
2013-01-28 17:27 13951.什么是单元测试 单元测试(unit testing) ... -
Struts2 Action的返回结果类型
2013-01-25 11:39 1311已配置结果类型名 类 名 描 述 disp ... -
Struts2的异常和错误界面处理
2013-01-25 11:20 0asdasaaaaaaaaa http://commun ... -
Struts2 多条数据保存的实现
2013-01-23 09:02 1137在企业开发过程中,经常会遇到多条数据,需要同时保存或者添加的问 ... -
Strtus2 的分页实现(一)
2013-01-23 07:47 869第一,导入js function showPage ... -
Struts2+Mybatis+Freemarker+Tiles架构灵活的开发框架(五)
2013-01-22 16:49 1082推荐的文件分层结构如下 com.XXX.lib.action ... -
Struts2+Mybatis+Freemarker+Tiles架构灵活的开发框架(四)
2013-01-22 15:48 891接着继续来配置mybatis 第一,导入包 clas ... -
Struts2+Mybatis+Freemarker+Tiles架构灵活的开发框架(三)
2013-01-22 15:26 1426接着上面继续,这次我们来配置freemarker 第一,修改w ... -
Struts2+Mybatis+Freemarker+Tiles架构灵活的开发框架(二)
2013-01-22 14:44 1676接着上面继续,这次我们来配置tiles 第一,导入包 ... -
Struts2+Mybatis+Freemarker+Tiles架构灵活的开发框架(一)
2013-01-22 13:00 1507本文主要介绍如何架构一个可扩展的系统开发框架。 其中Stru ...
相关推荐
- **Struts2**: 提供`ServletRequestAware`和`SessionAware`接口支持。 - **Spring**: `@Autowired`和`@Resource`注解实现依赖注入。 - **OGNL**: 处理表达式。 - **Commons-lang**和**Commons-logging**: 提供工具...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它极大地简化了Java Web应用程序的开发工作。而iReport则是一款强大的报表设计工具,它可以与Java应用程序结合,用于创建动态的、交互式的PDF...
Map, Object> dataModel = new HashMap(); dataModel.put("name", "张三"); dataModel.put("age", 30); // 渲染模板 StringWriter writer = new StringWriter(); template.process(dataModel, writer); // ...
- 数据库迁移通常涉及数据导出、转换和导入的过程。可以使用数据迁移工具,或者编写脚本手动进行。 6. **JSP页面间传递数据** - URL参数传递:在URL后面附加参数。 - 请求转发:使用request....
Freemarker是一个强大的模板引擎,常用于Web应用中的视图层渲染,比如JavaEE的Struts2、Spring MVC等框架。它允许开发者使用简单的模板语言来分离业务逻辑和视图展示,使得页面设计更为灵活。在本案例中,我们将探讨...
2. **流程执行**: 支持动态流程实例的创建、控制和终止,能够处理复杂的分支、并行和循环结构。 3. **任务管理**: 提供任务分配、完成和监控功能,支持用户界面和API两种方式操作。 4. **规则引擎**: 集成了Drools,...
HashMap允许一个null键和任意数量的null值。 - **性能**:一般情况下,HashMap比Hashtable性能更好。 ##### 九大隐式对象 - **page**:代表当前页面的范围。 - **pageContext**:表示当前页面上下文,可以访问当前...
2. **Java集合框架**:为了存储和处理数据,开发者会使用ArrayList、LinkedList、HashMap等集合类。在productosCRUD系统中,可能需要用到这些数据结构来保存和操作产品的信息。 3. **IO流与NIO**:Java的输入/输出...