Excel封装类 导成excel 封装思路
来源:互联网 发布:福建广电网络宽带 编辑:程序博客网 时间:2024/05/16 15:24
封装Excel导出类
初始版本:SXSSFWorkbook wb = new SXSSFWorkbook(-1); Sheet sh = wb.createSheet(); // 创建一个行 Row row = sh.createRow(0); Cell cell = row.createCell(0); String address = new CellReference(cell).formatAsString();//单元格地址 cell.setCellValue(address); ((SXSSFSheet)sh).flushRows(100); // retain 100 last rows and flush all others FileOutputStream fos = new FileOutputStream(new File("d://test.xlsx")); wb.write(fos); fos.close(); wb.dispose();
封装思路:
1. 因为要写到硬盘 细分成四个属性 /** 导出文件的存放路径 */ private String filePath; /** 下载导出文件的路径 */ private String fileWebPath; /**文件名称前缀*/ private String filePrefix; /**导出文件全路径*/ private String fileAllPath;2. * 刷新需要设置变量,定义属性 * 行数 列表可变定义变量 × excel各个列都会有标题,定义List属性 * 每一行就是一个对象,每个列就是其中一个属性 通过反射来对列值进行设置, 定义一个List 属性 /** * 定义保存在内存中的数量,-1表示手动控制 */ private int flushRows; /** 导出文件行数 */ private int rownum; /** 导出文件列数 */ private int colnum; /** 导出文件列标题 */ private List<String> fieldNames; /**导出文件每列代码,用于反射获取对象属性值*/ private List<String> fieldCodes;3. 初始化方法* 创建对象 初始化赋值* 设置标题public static ExcelExportSXXSSF start(String filePath, String fileWebPath,String filePrefix, List<String> fieldNames,List<String> fieldCodes, int flushRows) throws Exception { ExcelExportSXXSSF excelExportSXXSSF = new ExcelExportSXXSSF(); excelExportSXXSSF.setFilePath(filePath); excelExportSXXSSF.setFileWebPath(fileWebPath); excelExportSXXSSF.setFilePrefix(filePrefix); excelExportSXXSSF.setFieldNames(fieldNames); excelExportSXXSSF.setFieldCodes(fieldCodes); excelExportSXXSSF.setWb(new SXSSFWorkbook(flushRows));//创建workbook excelExportSXXSSF.setSh(excelExportSXXSSF.getWb().createSheet());//创建sheet excelExportSXXSSF.writeTitles(); return excelExportSXXSSF; }5.设置导入文件的标题 提出一个方法 /** * 设置导入文件的标题 * 开始生成导出excel的标题 */ private void writeTitles() throws Exception { rownum = 0;//第0行 colnum = fieldNames.size();//根据列标题得出列数 Row row = sh.createRow(rownum); for (int cellnum = 0; cellnum < colnum; cellnum++) { Cell cell = row.createCell(cellnum); cell.setCellValue(fieldNames.get(cellnum)); } }6.向导出文件写数据 * 向列里写数据 需要反射 提出一个方法/** * 向导出文件写数据 * @param datalist * 存放Object对象,仅支持单个自定义对象,不支持对象中嵌套自定义对象 * @return */ public void writeDatasByObject(List datalist) throws Exception { for (int j = 0; j < datalist.size(); j++) { // 0行是标题所以从1行开始 行和列设置 rownum = rownum + 1; Row row = sh.createRow(rownum); for (int cellnum = 0; cellnum < fieldCodes.size(); cellnum++) { Object owner = datalist.get(j); Object value = invokeMethod(owner, fieldCodes.get(cellnum), new Object[] {}); Cell cell = row.createCell(cellnum); cell.setCellValue(value!=null?value.toString():""); } } }7. 反射的方法/** * 反射方法,通过get方法获取对象属性 */ private Object invokeMethod(Object owner, String fieldname, Object[] args) throws Exception { String methodName = "get" + fieldname.substring(0, 1).toUpperCase() + fieldname.substring(1); Class ownerClass = owner.getClass(); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName, argsClass); // 第二个参数是方法的形参 Class 类型 比如String return method.invoke(owner, args); }8. 导出文件 返回下载的地址** 导出方法 返回下载的路径/** 导出文件 */ public String exportFile() throws Exception { String filename = filePrefix+"_"+MyUtil.getCurrentTimeStr() + ".xlsx"; FileOutputStream out = new FileOutputStream(filePath + filename); wb.write(out); out.flush(); out.close(); setFileAllPath(fileWebPath + filename); return fileWebPath + filename; } // 测试//导出文件存放的路径,并且是虚拟目录指向的路径 String filePath = "d:/upload/linshi/"; //导出文件的前缀 String filePrefix="ypxx"; //-1表示关闭自动刷新,手动控制写磁盘的时机,其它数据表示多少数据在内存保存,超过的则写入磁盘 int flushRows=100; //指导导出数据的title List<String> fieldNames=new ArrayList<String>(); fieldNames.add("流水号"); fieldNames.add("通用名"); fieldNames.add("价格"); //告诉导出类数据list中对象的属性,让ExcelExportSXXSSF通过反射获取对象的值 List<String> fieldCodes=new ArrayList<String>(); fieldCodes.add("bm");//药品流水号 fieldCodes.add("mc");//通用名 fieldCodes.add("price");//价格 //注意:fieldCodes和fieldNames个数必须相同且属性和title顺序一一对应,这样title和内容才一一对应 //开始导出,执行一些workbook及sheet等对象的初始创建 ExcelExportSXXSSF excelExportSXXSSF = ExcelExportSXXSSF.start(filePath, "/upload/", filePrefix, fieldNames, fieldCodes, flushRows); //准备导出的数据,将数据存入list,且list中对象的字段名称必须是刚才传入ExcelExportSXXSSF的名称 List<Ypxx> list = new ArrayList<Ypxx>(); Ypxx ypxx1 = new Ypxx("001", "青霉素", 5); Ypxx ypxx2 = new Ypxx("002", "感冒胶囊", 2.5f); list.add(ypxx1); list.add(ypxx2); //执行导出 excelExportSXXSSF.writeDatasByObject(list); //输出文件,返回下载文件的http地址 String webpath = excelExportSXXSSF.exportFile();
阅读全文
0 0
- Excel封装类 导成excel 封装思路
- POI操作EXCEL--封装类
- QT 操作excel 类封装
- MFC操作EXCEL封装类
- VBS 封装Excel函数
- java封装导出Excel
- 导出Excel封装
- 封装excel的导出
- 导出excel封装
- 封装poi导出EXCEL
- VB读写EXCEL文件(封装类)
- 一个封装的实用的EXCEL类
- 封装类 导出gridview为excel
- QT 操作excel 类封装(转载)
- QT 操作excel 类封装(转载)
- c#操作excel封装的类
- QT 操作excel 类封装使用
- 封装poi操作Excel工具类
- 机器学习:数据驱动的科学
- Java的内存回收机制
- 集合-Set
- 全军出击,银联出台标准二维码产品
- System.arraycopy 与 Arrays.copyOf 分析
- Excel封装类 导成excel 封装思路
- 个人中心,设置头像
- 用友U8二次开发之登录
- 用Unity3D开发2D小游戏 Flappy Bird
- 跨站脚本攻击(XSS)
- 使用_.htaccess_文件禁用_Web_目录列举
- 如何使用MindManager进行高效的工作会议?
- MVC与三层架构
- mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 解决方法